0

int 型の列挙型を取り、それを int 値に変換できるジェネリック メソッドを作成しようとしています。例えば:

public int GetIntValue(Enum enumValue) {
    return (int)enumValue;
}

これは私がこれを達成した1つの方法ですが、より良い方法があるようです:

public static int ToInt(this Enum value) {
    return (int) Enum.Parse(value.GetType(), Enum.GetName(value.GetType(), value));
}

何か案は?

4

4 に答える 4

2

あなたは主に例2でそれを持っていました-あなたはこれを行うことができるはずです:

public static int ToInt(this Enum value)
{
    return Convert.ToInt32(value);
}
于 2012-10-31T21:31:23.753 に答える
0

列挙型をその基になる値に変換するためのいくつかのオプションがあり、ジェネリックにも適用できます。

return Convert.ToInt32(enumValue)

また

return (int)enumValue;

また

Type integralType = Enum.GetUnderlyingType (enumValue.GetType());
return Convert.ChangeType (enumValueEnum, integralType);

または、最初に文字列を返し、後で int に変換しますか?

return int.Parse(anyEnum.ToString("D"));

しかし、個人的には最初のオプションを好む

于 2012-10-31T21:34:45.013 に答える
0

以下のコード フラグメントは、ジェネリックを使用してそれを行う 2 つの方法を示しています。

public enum MyEnum
{
    Three = 3,
    Seven = 7
}

public static class MyExtensions
{
    public static int ToInt<T>(this T value)
    {
        return Convert.ToInt32(value);
    }
}

[TestFixture]
public class CodeTests
{
    public int GetInt<T>(T value)
    {
        return Convert.ToInt32(value);
    }

    [Test]
    public void TestOne()
    {
        Assert.AreEqual(7, GetInt(MyEnum.Seven));
    }

    [Test]
    public void TestTwo()
    {
        Assert.AreEqual(7, MyEnum.Seven.ToInt());
    }
}
于 2012-10-31T21:41:37.903 に答える
0

プレーンでシンプル、使用するだけ

public static int ToInt(this Enum value)
{
    return Convert.ToInt32(value);
}
于 2012-10-31T21:42:14.567 に答える