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

Tob*_*oby 2 c# generics enums nullable

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

对于不可为空的情况,以下工作正常,但我无法弄清楚如何正确调整它以允许可为空的返回类型,比如在参数为null的情况下,或者实际上如何允许返回类型可能是null或不可为空(也许这是不可能的?).每置换Nullable<T>T?,我试过仍然导致的返回值和方法名称都被红色squiggleys

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;
}
Run Code Online (Sandbox Code Playgroud)

Pat*_*man 6

没有类型参数约束允许'类型可以为null'.T?作为返回类型是被禁止的,并没有限制(的class,new()等等)是有帮助这里.

你必须制作两个方法,其中一个你必须用structconstaint来装饰以允许Nullable<T>:

private static T? ConvertStringToEnumValue<T>(string value) where T : struct
Run Code Online (Sandbox Code Playgroud)

  • 请注意,您应该更改方法名称.您不能有两种方法,唯一的区别是返回类型或约束. (3认同)