-1

我有一个FaultType enum超过 100 名成员。

public enum FaultType
{
    FaultType1,
    FaultType2,
    FaultType3,
    FaultType4,
    FaultType5,
}

我有一个FaultTypeConstants class对应的FaultType

public class FaultTypeConstants
{
    public const int FaultType1 = 600;
    public const int FaultType2 = 100;
    public const int FaultType3 = 453;
    public const int FaultType4 = 200;
    public const int FaultType5 = 300;
}

我试过了..

    public static List<FaultType> GetFaults(List<int> FaultConstants)
    {
        var faults = new List<FaultType>();
        FaultConstants.ForEach(fc => {
            switch (fc)
            {
                case FaultTypeConstants.FaultType1:
                    faults.Add(FaultType.FaultType1);
                    break;
                case FaultTypeConstants.FaultType2:
                    faults.Add(FaultType.FaultType2);
                    break;
                case FaultTypeConstants.FaultType3:
                    faults.Add(FaultType.FaultType3);
                    break;
                case FaultTypeConstants.FaultType4:
                    faults.Add(FaultType.FaultType4);
                    break;
                case FaultTypeConstants.FaultType5:
                    faults.Add(FaultType.FaultType5);
                    break;
                default:
                    break;
            }
        });

        return faults;
    }

现在,我如何填充List<FaultType>基于FaultTypeConstants值?

4

3 回答 3

5

只需提供常量作为枚举本身的一部分:

public enum FaultType
{
    FaultType1 = 600,
    FaultType2 = 100,
    FaultType3 = 453,
    FaultType4 = 200,
    FaultType5 = 300,
}

然后你可以投:

FaultType ft = (FaultType) 600;

对于列表,您可以循环迭代foreach,或者如果您喜欢 LINQ,您可以使用:

List<FaultType> listOfFaultTypes = listOfInts.Cast<FaultType>().ToList();

更新

根据您根本无法更改枚举的评论,我建议您构建一个可用于查找的字典。

private static readonly Dictionary<int, FaultType> FaultTypeDictionary =
    Enum.GetValues(typeof(FaultType))
        .Cast<FaultType>()
        .ToDictionary(
            x => (int)typeof(FaultTypeConstants).GetField(x.ToString()).GetValue(null),
            x => x);

public static List<FaultType> GetFaults(List<int> faults)
{
    return faults.Select(x => FaultTypeDictionary[x]).ToList();
}

它使用反射,但只对枚举进行一次传递。由于它是静态的,因此您无需为每次查找都执行此操作。

于 2013-10-06T01:46:46.203 回答
1

尝试Enum.GetValues

Enum.GetValues(typeof(FaultType)).Cast<FaultType>().ToList()

编辑

基于OP中的函数签名,有一种更简洁的方式

public static List<FaultType> GetFaults(List<int> FaultConstants)
{
   return FaultConstants.Cast<FaultType>().ToList()
}
于 2013-10-06T01:45:58.927 回答
-1

我得到了解决方案。

public static List<FaultType> GetFaults(List<int> FaultConstants)
{
    return typeof(FaultTypeConstants)
        .GetFields(BindingFlags.Public | BindingFlags.Static)
        .Where(fi => FaultConstants.Contains(Convert.ToInt32(fi.GetValue(null))))
        .Select(fi => (FaultType)Enum.Parse(typeof(FaultType), fi.Name)).ToList();
    }
于 2013-10-06T02:21:25.677 回答