public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) {
if (value is string) {
try {
string strValue = (string)value;
if (strValue.IndexOf(',') != -1) {
long convertedValue = 0;
string[] values = strValue.Split(new char[] {','});
foreach(string v in values) {
convertedValue |= Convert.ToInt64((Enum)Enum.Parse(type, v, true), culture);
}
return Enum.ToObject(type, convertedValue);
}
else {
return Enum.Parse(type, strValue, true);
}
}
catch (Exception e) {
throw new FormatException(SR.GetString(SR.ConvertInvalidPrimitive, (string)value, type.Name), e);
}
}
else if (value is Enum[]) {
long finalValue = 0;
foreach(Enum e in (Enum[])value) {
finalValue |= Convert.ToInt64(e, culture);
}
return Enum.ToObject(type, finalValue);
}
return base.ConvertFrom(context, culture, value);
}