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新手,不想添加。首先,因为它有效,我想知道什么是正确的做法。
提前感谢
是的,您必须添加一个.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()
提取第一个项目,那么您将面临测试抛出非断言异常的风险,因为您没有第一个(或单个)项目。