C#确定字符串数组中的任何元素是否包含任何位置的给定字符串

时间:2010-10-09 05:14:13

标签: c# linq arrays string

我有一个字符串数组:

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

我觉得我很接近,我似乎无法得到它。

这种方法显然不是万无一失的,它应该返回可能有问题的“是”的第一个实例。我的潜在列表相当小,索引词总是唯一的。

1 个答案:

答案 0 :(得分:6)

试试这个:

string result = Animals.FirstOrDefault(x => x.Contains("is")) ?? Animals.First();

(如果数组不包含任何元素,这将失败;在这种情况下你想做什么?你也可以尝试FirstOrDefault作为回退表达式 - 如果顺序,这将返回null是空的。)

根据您的要求,您发布的代码有两个问题:

  1. 它使用Enumerable.First,它会在空序列上抛出异常,即如果没有与原始谓词匹配的项目。
  2. 您在第二个语句中使用的索引是第一个查询结果中“is”子字符串的索引, 原始<的结果索引/ em>数组。因此,使用该数字索引原始数组是没有意义的。