gpt4 book ai didi

C# Linq 查询选择所有以 String 开头的枚举

转载 作者:行者123 更新时间:2023-11-30 21:32:09 26 4
gpt4 key购买 nike

我有一个 enum,我想找到 enum 的所有以传入字符串开头(不区分大小写)开头的匹配值

例子:

enum Test
{
Cat,
Caterpillar,
@Catch,
Bat
}

例如,如果我为此 Linq 查询指定 "cat",它将选择 Test.CatTest.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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com