如何在 .NET 3.5 中实现 .NET 4 的 Enum.TryParse 方法?
public static bool TryParse<TEnum>(string value, out TEnum result) where TEnum : struct
我不喜欢使用try-catch
作为我的应用程序正常流程的一部分来处理任何转换失败或其他非异常事件,所以我自己的Enum.TryParse
.NET 3.5 及更早版本的方法利用Enum.IsDefined()
方法以确保 Enum.Parse() 不会抛出异常。您还可以包括一些空检查value
以防止ArgumentNullException
如果值为空。
public static bool TryParse<TEnum>(string value, out TEnum result)
where TEnum : struct, IConvertible
{
var retValue = value == null ?
false :
Enum.IsDefined(typeof(TEnum), value);
result = retValue ?
(TEnum)Enum.Parse(typeof(TEnum), value) :
default(TEnum);
return retValue;
}
显然这个方法不会驻留在Enum
类,因此您需要一个类来将其包含在其中,这将是适当的。
一个限制是缺乏enum
泛型方法的约束,因此您必须考虑如何处理不正确的类型。Enum.IsDefined
会抛出一个ArgumentException
if TEnum
不是一个enum
但唯一的其他选择是运行时检查并引发不同的异常,因此我通常不会添加额外的检查,而只是让这些方法中的类型检查为我处理。我会考虑添加IConvertible
作为另一个约束,只是为了进一步限制类型。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)