我有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
?
答案 0 :(得分: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();
}
它使用反射,但只对枚举进行一次传递。由于它是静态的,因此您无需为每次查找执行此操作。
答案 1 :(得分:1)
Enum.GetValues(typeof(FaultType)).Cast<FaultType>().ToList()
修改强>
基于OP中的功能签名,有一种更加方式
public static List<FaultType> GetFaults(List<int> FaultConstants)
{
return FaultConstants.Cast<FaultType>().ToList()
}
答案 2 :(得分:-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();
}