如何在 .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
上包含一些 null 检查,以防止在 value 为 null 时出现 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
约束,因此您必须考虑要如何处理不正确的类型。如果 TEnum
不是 enum
,Enum.IsDefined
将抛出 ArgumentException
但唯一的其他选项是运行时检查并抛出一个不同的异常,所以我通常不添加额外的检查,只是让这些方法中的类型检查为我处理。我会考虑添加 IConvertible
作为另一个约束,只是为了帮助进一步约束类型。
关于c# - .NET 3.5 中 Enum.TryParse 的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15017151/