LINQ返回IEnumerable<;字符串>;看似charArray中的值

本文关键字:charArray 看似 字符串 返回 IEnumerable lt LINQ gt | 更新日期: 2023-09-27 18:00:31

我有一个

IEnumerable<KeyValuePair<string,string>>

在这个IEnumerable中,我有一个名为"JobDetails"的密钥。为了确保这个密钥在那里,我使用了以下语句;

  var avalue = from val in tokensReturned where val.Key == "JobDetails" select val.Key;

我希望通过这个断言,因为密钥在那里

Assert.AreEqual("JobDetails", avalue);

我收到的消息是预期的:"J"但是"JobDetails"

Is还表示索引0 处的值不同

如果我在断言中向avalue添加.First(),那么测试通过了,这样做正确吗?我是一个LINQ新手,不想添加。首先,因为它有效,我想知道什么是正确的做法。

提前感谢

LINQ返回IEnumerable<;字符串>;看似charArray中的值

是的,您必须添加一个.First()。。。CCD_ 2将返回具有与具有CCD_ 5的CCD_ 4中的元素一样多的元素的另一个CCD_。具有0或1个元素的CCD_ 6仍然是CCD_。它不会隐式/自动地将"decade"设置为其"generic"T类型(在您的情况下为string)。使用.First()可以提取IEnumerable<T>的第一个元素,即T对象。如果没有元素,则会得到一个异常。

如果你确定应该有一个元素,我经常建议使用.Single(),它将检查是否正好有1个元素(这是一个额外的检查,当你使用DB时很有用,你认为应该返回1个元素的东西并不总是返回1个,因为你认为包含在DB中的东西并不完全包含在数据库中)

由于您已经只筛选出那些匹配的项目,您只需要检查您有多少:

Assert.AreEqual(1, avalue.Count());

如果您尝试用First()Single()提取第一个项目,那么您将面临测试抛出非断言异常的风险,因为您没有第一个(或单个)项目。