作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 enum
,我想找到 enum
的所有以传入字符串开头(不区分大小写)开头的匹配值
例子:
enum Test
{
Cat,
Caterpillar,
@Catch,
Bat
}
例如,如果我为此 Linq 查询指定 "cat"
,它将选择 Test.Cat
、Test.Caterpillar
、测试.Catch
最佳答案
Enum.GetValues(typeof(Test)) //IEnumerable but not IEnumerable<Test>
.Cast<Test>() //so we must Cast<Test>() for LINQ
.Where(test => Enum.GetName(typeof(Test), test)
.StartsWith("cat", StringComparison.OrdinalIgnoreCase))
或者如果你真的很在意这个,你可以提前准备一个前缀查找
ILookup<string, Test> lookup = Enum.GetValues(typeof(Test))
.Cast<Test>()
.Select(test => (name: Enum.GetName(typeof(Test), test), value: test))
.SelectMany(x => Enumerable.Range(1, x.name.Length)
.Select(n => (prefix: x.name.Substring(0, n), x.value) ))
.ToLookup(x => x.prefix, x => x.value, StringComparer.OrdinalIgnoreCase)
现在你可以
IEnumerable<Test> values = lookup["cat"];
在 zippy O(1) 时间以牺牲一点内存为代价。可能不值得!
关于C# Linq 查询选择所有以 String 开头的枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52462253/
我是一名优秀的程序员,十分优秀!