我有一个像这样的枚举:
public enum Animals
{
CatOne = 12,
CatTwo = 13,
CatThree = 14,
DogOne = 21,
DogTwo = 22
};
很好。
现在我想获取所有猫的值。我要做的是:
public static int[] GetCatValues()
{
List<int> catValues = new List<int>();
foreach(var cat in Enum.GetNames(typeof(Animals)))
{
Animals animal;
if(cat.StartsWith("Cat"))
{
Enum.TryParse(cat, out animal);
catValues.Add((int)animal);
}
}
return catValues.ToArray();
}
哪个工作正常。除了长得丑。为什么我不能做类似的事情
Animals
.Select(r => (int)r)
.Where(r => r.StartsWith("Cat"))
.ToArray();
我知道这行不通。那么有没有更好的方法来获取以特定字符串开头的枚举的所有值。
我知道我可能会使用正则表达式来避免误报,但是,我暂时保持简单。
谢谢。
最佳答案
这是一组折衷的代码 - 它不像您正在寻找的那样干净,但它比 foreach 循环版本要好得多。
Enum.GetValues(typeof(Animals)).OfType<Animals>()
.Where(x => x.ToString().StartsWith("Cat"))
.Select(x => (int)x).ToArray();
关于c# - 根据键名选择枚举值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15365395/