Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#确定字符串数组中的任何元素是否在任何位置包含给定字符串_C#_Linq_Arrays_String - Fatal编程技术网

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

C#确定字符串数组中的任何元素是否在任何位置包含给定字符串,c#,linq,arrays,string,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") st

我有一个字符串数组:

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
我想我已经很接近了,我只是似乎无法理解

这个方法显然不是傻瓜式的,它应该返回第一个可能有问题的“is”实例。我的潜在列表非常小,索引词总是唯一的。

试试这个:

string result = Animals.FirstOrDefault(x => x.Contains("is")) ?? Animals.First();
(如果数组不包含任何元素,则此操作将失败;在这种情况下,您希望执行什么操作?您也可以尝试对回退表达式执行
FirstOrDefault
——如果序列为空,此操作将返回
null

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

  • 它使用
    Enumerable.First
    ,这将在空序列上引发异常,即如果不存在与原始谓词匹配的项
  • 在第二条语句中使用的索引是第一个查询结果中“is”子字符串的索引,而不是原始数组中结果的索引。因此,使用该数字对原始数组进行索引是没有意义的 试试这个:

    string result = Animals.FirstOrDefault(x => x.Contains("is")) ?? Animals.First();
    
    (如果数组不包含任何元素,则此操作将失败;在这种情况下,您希望执行什么操作?您也可以尝试对回退表达式执行
    FirstOrDefault
    ——如果序列为空,此操作将返回
    null

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

  • 它使用
    Enumerable.First
    ,这将在空序列上引发异常,即如果不存在与原始谓词匹配的项
  • 在第二条语句中使用的索引是第一个查询结果中“is”子字符串的索引,而不是原始数组中结果的索引。因此,使用该数字对原始数组进行索引是没有意义的
    如果
    动物
    为空,我建议在???之后使用不带lambda的
    FirstOrDefault()
    ,而不是
    动物[0]
    。@jball:如果动物
    为空
    ,则仍然会引发异常。但是,如果数组为空,它将返回
    null
    。我不在乎。这种情况不可能发生。已经检查过了。谢谢。这很有效。我一直在使用一个.ToString()方法,其中的“is”似乎无法正常工作。我想我的原始代码可能会工作,但你的代码肯定会工作,所以我不在乎。让它工作吧。在调用ToString()之前,我只需检查我的对象是否为null。谢谢。@Shawn:好的。要使此代码为空安全,需要在取消引用之前检查数组是否为
    null
    ,并检查数组中的每个字符串是否为
    null
    。要实现第二个,请将谓词更改为
    x=>x!=null&&x.Contains(“is”)
    如果
    animates
    为null,我建议使用
    .FirstOrDefault()
    而不是在???之后添加lambda
    animates[0]
    。@jball:如果animates
    null
    ,则仍然会引发异常。但是,如果数组为空,它将返回
    null
    。我不在乎。这种情况不可能发生。已经检查过了。谢谢。这很有效。我一直在使用一个.ToString()方法,其中的“is”似乎无法正常工作。我想我的原始代码可能会工作,但你的代码肯定会工作,所以我不在乎。让它工作吧。在调用ToString()之前,我只需检查我的对象是否为null。谢谢。@Shawn:好的。要使此代码为空安全,需要在取消引用之前检查数组是否为
    null
    ,并检查数组中的每个字符串是否为
    null
    。要实现第二个,请将谓词更改为
    x=>x!=null&&x.Contains(“is”)