关于c#:通用类型参数,通用枚举返回类型

Generic Type Parameters, Generic Enum Return Type

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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;
}

谢谢,


三个变化使它对我有效。将返回类型更改为nullabel,并添加了where t:struct(从https://stackoverflow.com/a/209219/455904剪切),并将中间的返回更改为返回enumValue。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
    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;
    }

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