我有一个方法可用于将字符串转换为通用枚举。结果值可以分配给可以可以为空的字段。
对于不可为空的情况,以下工作正常,但我无法弄清楚如何正确调整它以允许可为空的返回类型,比如在参数为null的情况下,或者实际上如何允许返回类型可以是null或不可为空(可能这不可能?)。我尝试过的Nullable<T>
和T?
的每个排列结果都会导致返回值和方法名称出现红色曲线
private static T ConvertStringToEnumValue<T>(string value)
{
// Converts string to a given enum-type T value.
T EnumValue;
try
{
EnumValue = (T)Enum.Parse(typeof(T), value);
if (!Enum.IsDefined(typeof(T), EnumValue))
{
return default(T); // 0 for enum
}
}
catch (Exception e)
{
return default(T); // 0 for enum
}
return EnumValue;
}
答案 0 :(得分:6)
没有类型参数约束允许&#39;类型可以为null&#39;。 T?
作为返回类型被禁止,并且所有约束(class
,new()
等)都没有帮助。
你必须制作两个方法,其中一个必须用struct
constaint进行装饰以允许Nullable<T>
:
private static T? ConvertStringToEnumValue<T>(string value) where T : struct
答案 1 :(得分:3)
我认为你可以这样做:
private static Nullable<T> ConvertStringToEnumValue<T>(string value) where T : struct
或者你可以使用它:
private static T? ConvertStringToEnumValue<T>(string value) where T : struct