与枚举元素值的比较过程

问题描述

枚举 A

{ a = 10,a1 = 35,....}

枚举 B

{ b = 5,b1 = 20,..... }

如何获取两个枚举类元素中任意两个的int值?与这些值进行比较并销毁较小的。

解决方法

对不起。也许这就是您要找的?

enumA.CompareTo(enumB) > 0 ? “A大于B”:“B大于或等于A”; enumA.CompareTo(enumB) = 0 ? "A 等于 B" : "A 不等于 B";

这应该比较两个 Enum 实例(enumA 和 enumB),并执行插入到字符串位置的代码。

,

以这个控制台应用为例,从你的枚举类型中获取最低的整数:

using System;
using System.Linq;
using System.Collections.Generic;

namespace ConsoleApp1 {
    class Program {

        enum Colors {
            blue = 1,orange = 2,purple = 3
        }

        enum Stages {
            level1 = 35,level2 = 62,level3 = 13
        }

        public static int getMinEnumValue(Type enumType) {
            Array values = Enum.GetValues(enumType);
            List<int> intList = ((int[])values).ToList();
            int minValue = intList.Min();

            return minValue;
        }

        static void Main(string[] args) {
            int minStagegInt = getMinEnumValue(typeof(Stages));
            int minColorInt = getMinEnumValue(typeof(Colors));

            Console.WriteLine($"Min stage int: {minStagegInt},which is: {Enum.GetName(typeof(Stages),minStagegInt)}");
            Console.WriteLine($"Min color int: {minColorInt},which is: {Enum.GetName(typeof(Colors),minColorInt)}");
            Console.ReadLine();

            //keyValue anonymous type
            var myInstance1 = new[] { new { a = 10 },new { a = 35 },new { a = 3 } };
            var myInstance2 = new[] { new { b = 5 },new { b = 20 } };

            var minObject1 = myInstance1.ToList().OrderBy(elem => elem.a).FirstOrDefault();
            var minObject2 = myInstance2.ToList().OrderBy(elem => elem.b).FirstOrDefault();

            Console.WriteLine($"Min a instance1: {minObject1.ToString()}");
            Console.WriteLine($"Min b instance2: {minObject2.ToString()}");
            Console.ReadLine();
        } 
    }
}

输出:

enter image description here

一旦您能够获得最小值或将您希望的逻辑应用于您的枚举类型,您就可以销毁或对您获得的枚举类型的枚举实例做任何您想做的事情。

,

Enum 可以转换为 int

 EnumA valA = EnumA.a; //10
 EnumB valB = EnumB.b; //5

 if((int)valA < (int)valB) // 10 < 5
 { Destroy(a);}
 else {Destroy(b);}

编辑:

public static int CompareAtoB(int a,int b)
{
     if(a==b) return 0;
     return (a < b) ? 1 : -1;
 }

您现在可以传递您在作为参数提供时投射的任何值。

int result = CompareAtoB((int)someEnum,(int) otherEnum);

然后根据结果采取行动。