public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) {
if (destinationType == null) {
throw new ArgumentNullException("destinationType");
}
if (destinationType == typeof(string)) {
string retVal;
CultureInfo currentUICulture = Thread.CurrentThread.CurrentUICulture;
if (culture != null && culture.Equals(CultureInfo.InvariantCulture)) {
Thread.CurrentThread.CurrentUICulture = culture;
}
try {
if (value == null || value == CultureInfo.InvariantCulture) {
retVal = DefaultCultureString;
}
else {
retVal = ((CultureInfo)value).DisplayName;
}
}
finally {
Thread.CurrentThread.CurrentUICulture = currentUICulture;
}
return retVal;
}
if (destinationType == typeof(InstanceDescriptor) && value is CultureInfo) {
CultureInfo c = (CultureInfo) value;
ConstructorInfo ctor = typeof(CultureInfo).GetConstructor(new Type[] {typeof(string)});
if (ctor != null) {
return new InstanceDescriptor(ctor, new object[] {c.Name});
}
}
return base.ConvertTo(context, culture, value, destinationType);
}