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

3つの変更により、私にとってはうまくいきました。戻り値の型を 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 に答える
1

クラスを使用する代わりに、 Enum.ToObjectメソッドを使用しConvertます。

于 2012-05-24T08:07:33.610 に答える