如何将Nullable T作为返回类型?

时间:2017-06-15 11:56:18

标签: c# generics enums nullable

我有一个方法可用于将字符串转换为通用枚举。结果值可以分配给可以可以为空的字段。

对于不可为空的情况,以下工作正常,但我无法弄清楚如何正确调整它以允许可为空的返回类型,比如在参数为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;
}

2 个答案:

答案 0 :(得分:6)

没有类型参数约束允许&#39;类型可以为null&#39;。 T?作为返回类型被禁止,并且所有约束(classnew()等)都没有帮助。

你必须制作两个方法,其中一个必须用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