我有一个字符串数组:
string[] Animals = {"Cat", "Dog", "Fish"};
然后我想确定哪个元素包含序列“is”并返回整个元素;在这种情况下“鱼”
如果我想找到“gh”,它在列表中不存在,所以它应该返回第一个元素,在本例中为“Cat”
我尝试过这个linq代码,但我认为我没有正确执行lambda部分。
int index = Animals.Where(x => x.IndexOf("is") >= 0).First().IndexOf("is")
string result = index > 0 ? Animals[index] : Animals[0];
此代码抛出此错误:
Exception Details: System.ArgumentNullException: Value cannot be null.
Parameter name: value
我觉得我很接近,我似乎无法得到它。
这种方法显然不是万无一失的,它应该返回可能有问题的“是”的第一个实例。我的潜在列表相当小,索引词总是唯一的。
答案 0 :(得分:6)
试试这个:
string result = Animals.FirstOrDefault(x => x.Contains("is")) ?? Animals.First();
(如果数组不包含任何元素,这将失败;在这种情况下你想做什么?你也可以尝试FirstOrDefault
作为回退表达式 - 如果顺序,这将返回null
是空的。)
根据您的要求,您发布的代码有两个问题:
Enumerable.First
,它会在空序列上抛出异常,即如果没有与原始谓词匹配的项目。