1

我有一个具有通用返回类型的函数。如果 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;
}

谢谢,

4

2 回答 2

1

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

于 2012-05-24T08:07:33.610 回答
1

三个变化使它对我有用。将返回类型更改为 Nullabel 并添加 where T : struct (摘自https://stackoverflow.com/a/209219/455904)并将中间的返回更改为返回 enumValue。

    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;
    }
于 2012-05-24T08:25:16.927 回答