可能是重复问题:
如何尝试解析枚举值?
我正在使用 .net 3.5,它没有 Enum.TryParse。
那么我该如何安全地将字符串解析为枚举类型呢?
在 .net 4.0 中,我是这样做的:
SomeEnum someEnum;
if (Enum.TryParse(someString, true, out someEnum))
{
//
}
可能是重复问题:
如何尝试解析枚举值?
我正在使用 .net 3.5,它没有 Enum.TryParse。
那么我该如何安全地将字符串解析为枚举类型呢?
在 .net 4.0 中,我是这样做的:
SomeEnum someEnum;
if (Enum.TryParse(someString, true, out someEnum))
{
//
}
另一种缺失方法的版本: Enum.TryParse (C#中)
所有类型的“TryParse”方法非常有用,我一直在使用它们。但令人惊讶的是,微软没有在Framework中包含一个非常有用的方法:Enum.TryParse. 很多编码人员会发现自己不时需要为他们的枚举编写“解析”方法。类似于这样:
public enum ImageType
{
Jpg,
Gif,
Png
}
public static ImageType ParseImagetype(string typeName)
{
typeName = typeName.ToLower();
switch (typeName)
{
case "Gif":
return ImageType.Gif;
case "png":
return ImageType.Png;
default:
case "jpg":
return ImageType.Jpg;
}
}...
因此,为了将所有这些“知识”整合在一起,我编写了自己的通用版本的“Enum.TryParse”方法,它也忽略大小写,并且不使用try和catch:
public static bool EnumTryParse<T>(string strType,out T result)
{
string strTypeFixed = strType.Replace(' ', '_');
if (Enum.IsDefined(typeof(T), strTypeFixed))
{
result = (T)Enum.Parse(typeof(T), strTypeFixed, true);
return true;
}
else
{
foreach (string value in Enum.GetNames(typeof(T)))
{
if (value.Equals(strTypeFixed, StringComparison.OrdinalIgnoreCase))
{
result = (T)Enum.Parse(typeof(T), value);
return true;
}
}
result = default(T);
return false;
}
}
这一行代码 'string strTypeFixed = strType.Replace(' ', '');' 是因为我从第三方WebService获取的枚举字符串中包含空格,而在枚举中是不允许有空格的,所以我的枚举中使用''代替了空格。
要解析ImageType(来自上面的示例),只需像这样使用:
ImageType type;
if (Utils.EnumTryParse<ImageType>(typeName, out type))
{
return type;
}
return ImageType.Jpg;