通用类型参数,通用枚举返回类型

时间:2012-05-24 07:58:14

标签: c# generics

我有一个泛型返回类型的函数。如果value参数是有效的枚举值,则该方法返回相关的枚举值。

如何返回相关的枚举值?编译器错误:无法转换类型'int?'到'T'

public static T? GetEnumValue<T>(int? value)
{
    if (value == null)
    {
        return null;
    }

    try
    {
        var enumValues = Enum.GetValues(typeof(T));

        foreach (object enumValue in enumValues)
        {
            if (Convert.ToInt32(enumValue).Equals(value))
            {
                // ERROR: Cannot convert type 'int?' to 'T'
                return (T)value;
            }
        }
    }
    catch (ArgumentNullException)
    {
    }
    catch (ArgumentException)
    {
    }
    catch
    {
    }

    return null;
}

谢谢,

2 个答案:

答案 0 :(得分:1)

使用Enum.ToObject方法,而不是使用Convert类。

答案 1 :(得分:1)

三个变化使它对我有用。将返回类型更改为Nullable并添加到T:struct(从https://stackoverflow.com/a/209219/455904中取出)并在中间更改返回以返回枚举值。

    public static Nullable<T> GetEnumValue<T>(int? value) 
        where T : struct
    {
        if (value == null)
        {
            return null;
        }

        try
        {
            var enumValues = Enum.GetValues(typeof(T));

            foreach (object enumValue in enumValues)
            {
                if (Convert.ToInt32(enumValue).Equals(value))
                {
                    return (T)enumValue;
                }
            }
        }
        catch (ArgumentNullException)
        {
        }
        catch (ArgumentException)
        {
        }
        catch
        {
        }

        return null;
    }