public string GetXmlName (string typeName, object enumValue)
{
if (enumValue is string) {
throw new InvalidCastException ();
}
long value = 0;
try {
value = ((IConvertible) enumValue).ToInt64 (CultureInfo.CurrentCulture);
} catch (FormatException) {
throw new InvalidCastException ();
}
for (int i = 0; i < Values.Length; i++) {
if (Values[i] == value)
return XmlNames[i];
}
if (IsFlags && value == 0)
return string.Empty;
string xmlName = string.Empty;
if (IsFlags) {
#if NET_2_0
xmlName = XmlCustomFormatter.FromEnum (value, XmlNames, Values, typeName);
#else
xmlName = XmlCustomFormatter.FromEnum (value, XmlNames, Values);
#endif
}
if (xmlName.Length == 0) {
#if NET_2_0
throw new InvalidOperationException (string.Format(CultureInfo.CurrentCulture,
"'{0}' is not a valid value for {1}.", value, typeName));
#else
return value.ToString (CultureInfo.InvariantCulture);
#endif
}
return xmlName;
}