我正在尝试构建从用户字符串获取的通用函数,并尝试将其解析为枚举值,如下所示:
private Enum getEnumStringEnumType(Type i_EnumType)
{
string userInputString = string.Empty;
Enum resultInputType;
bool enumParseResult = false;
while (!enumParseResult)
{
userInputString = System.Console.ReadLine();
enumParseResult = Enum.TryParse(userInputString, true, out resultInputType);
}
}
但是我得到:
The type 'System.Enum' must be a non-nullable value type in order to use it as parameter 'TEnum' in the generic type or method 'System.Enum.TryParse<TEnum>(string, bool, out TEnum) .
错误意味着我需要为resultInputType减去特定的Enum?
我怎样才能解决这个问题 ?
谢谢。
最佳答案
TryParse
method具有以下签名:
TryParse<TEnum>(string value, bool ignoreCase, out TEnum result)
where TEnum : struct
它具有通用类型参数
TEnum
,该参数必须是一个struct,用于确定要解析的枚举的类型。当您不显式提供(如您所做的那样)时,它将采用您提供的任何类型作为result
参数,在您的情况下为Enum
类型(而不是枚举本身的类型)。请注意
Enum
is a class(尽管它继承自ValueType
),因此不满足TEnum
是结构的要求。您可以通过删除
Type
参数并为该方法提供一个通用类型参数来解决此问题,该参数具有与struct
函数上的通用类型参数相同的约束(即TryParse
)。因此,请尝试将其命名为通用类型参数
TEnum
:private static TEnum GetEnumStringEnumType<TEnum>()
where TEnum : struct
{
string userInputString = string.Empty;
TEnum resultInputType = default(TEnum);
bool enumParseResult = false;
while (!enumParseResult)
{
userInputString = System.Console.ReadLine();
enumParseResult = Enum.TryParse(userInputString, true, out resultInputType);
}
return resultInputType;
}
要调用该方法,请使用:
GetEnumStringEnumType<MyEnum>();