7

C# を使用して、2 つの列挙値の最小値または最大値を取得するにはどうすればよいですか?

たとえば、私が持っている場合

enum Permissions
{
    None,
    Read,
    Write,
    Full
}

たとえば、実行Helper.Max(Permissions.Read, Permissions.Full)して取得できる方法はありますか?Permissions.Full

4

6 に答える 6

16

列挙型が実装されIComparableているため、次を使用できます。

public static T Min<T>(T a, T b) where T : IComparable
{
    return a.CompareTo(b) <= 0 ? a : b;
}
于 2013-04-10T18:52:37.087 に答える
3

列挙型は整数型に変換できるため、次のことができます。

   var permissions1 = Permissions.None;
   var permissions2 = Permissions.Full;
   var maxPermission = (Permissions) Math.Max((int) permissions1, (int) permissions2);

列挙型が符号なしの型、または 32 ビットを超える型 (つまり、long または ulong) に基づいている場合、これは問題を引き起こす可能性があることに注意してください。列挙型で宣言された型。

つまり、次のように宣言された列挙型の場合:

enum Permissions : ulong
{
    None,
    Read,
    Write,
    Full
}

以下を使用します。

   var permissions1 = Permissions.None;
   var permissions2 = Permissions.Full;
   var maxPermission = (Permissions) Math.Max((ulong) permissions1, (ulong) permissions2);
于 2013-04-10T18:51:51.050 に答える
0

これは、これを行う .NET で何も見つからなかったため、私が思いついたものです。

public static class EnumHelper
{
    public static T Min<T>(T a, T b)
    {
        return (dynamic)a < (dynamic)b ? a : b;
    }

    public static T Max<T>(T a, T b)
    {
        return (dynamic)a > (dynamic)b ? a : b;
    }
}
于 2013-04-10T18:47:06.490 に答える
-1

私はあなたがこのようなものが欲しいと思います:

public enum Enum1
{
    A_VALUE,
    B_VALUE,
    C_VALUE
}

public enum Enum2
{
    VALUE_1,
    VALUE_2,
    VALUE_3
}

class Program
{
    static void Main(string[] args)
    {
        Program p = new Program();

        Console.WriteLine(p.EnumMin<Enum1>());
        Console.WriteLine(p.EnumMax<Enum2>());

    }


    T EnumMin<T>()
    {
        T ret; ;
        Array x = Enum.GetValues(typeof(T));
        ret  = (T) x.GetValue(0);
        return ret;
    }

    T EnumMax<T>()
    {
        T ret; ;
        Array x = Enum.GetValues(typeof(T));
        ret = (T)x.GetValue(x.Length-1);
        return ret;
    }

}
于 2013-07-22T18:39:57.907 に答える