gpt4 book ai didi

c# - LINQ 查询 - 根据具有与字符串匹配的属性的值选择键?

转载 作者:行者123 更新时间:2023-11-30 18:55:13 26 4
gpt4 key购买 nike

我有一个字典

我需要选择 Bar.Prop1 匹配字符串值的第一个 Foo。

public class Foo { }

public class Bar
{
public String Prop1 { get; set; }
}

现在我是这样的...

foreach (var kvp in MyDictionary)
{
if (kvp.Value.Prop1 == theString)
{
var key = kvp.Key;
//Do something with it
break;
}
}

但这似乎不像 LINQ 查询那么干净。 ReSharper 将其变成:

foreach (var kvp in MyDictionary.Where(kvp => kvp.Value.Prop1 == theString))
{
var key = kvp.Key;
//Do something with it
//break; is unnecessary because I only get one kvp back anyways.
}

我只想要第一个匹配的项目,因为我从来不期望得到超过一个 KVP。这违背了业务逻辑,因此单元测试会解决这个问题。

最佳答案

I only want the very first item that matches, because I don't ever expect to get back more than one KVP. That goes against the business logic, so Unit Testing takes care of that.

如果是这种情况,我认为您需要使用更强大的代码保证您的意图,那就是 Single(或 SingleOrDefault)方法。 First 将返回匹配给定谓词的任意多个 中的第一个对象。如果许多 违背了您的期望和业务规则,这似乎是一个错误。就这样对待它。

var key = MyDictionary.Single(pair => pair.Value.Prop1 == someValue).Key;

对于Single,如果一个序列中有多个匹配项,则会导致异常。

SingleOrDefault 允许 0 或 1,但不能更多。如果使用这种方法,您需要在使用它执行其他操作(触发方法、访问属性等)之前捕获结果并与 null 进行比较。

关于c# - LINQ 查询 - 根据具有与字符串匹配的属性的值选择键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6373783/

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