'string []'不包含'Contains'的定义

时间:2018-08-08 18:43:53

标签: c#

完整的错误代码:

  

错误CS1929'字符串[]'不包含'包含'的定义,并且   最佳扩展方法重载   'Queryable.Contains(IQueryable,TSource)'需要一个   类型为“ IQueryable”的接收者

  string[] terms = new string[31];

我正在尝试查看数组是否在Excel文件中包含某些内容。 (使用互操作)

if (terms.Contains(xlWorkSheet.Cells[1, i1 + 1].Value.ToString())) ;
{

}

为什么“包含”在这里不起作用?

我进行了搜索,很明显,这与类型不同有关,但是在这种情况下,确实如此。它们都是字符串。

5 个答案:

答案 0 :(得分:3)

string[]List<string>不同,它没有Contains()方法。您需要遍历数组并比较每个索引。

for(int i = 0; i < terms.Length; i++)
{
    if (terms[i].Contains(xlWorkSheet.Cells[1, i1 + 1].Value.ToString()))
    {
        // do something
    }
}

但是,我建议您仅使用List<string>,而不要这样做。这样,您可以像在示例中尝试的那样使用List.Contains()。在大多数情况下,C#中的列表优于数组。

答案 1 :(得分:2)

数组(string[])实现IList,因此应具有Contains(object o)方法。但是implementation is explicit,这意味着只有在将类视为接口时,才可以访问该方法:

if (((IList)terms).Contains(xlWorkSheet.Cells[1, i1 + 1].Value.ToString()))

答案 2 :(得分:1)

您可以使用Array.Exists并传递一个比较lambda表达式:

if (Array.Exists(terms, elem => elem == xlWorkSheet.Cells[1, i1 + 1].Value.ToString()))
{
    ...
}

答案 3 :(得分:0)

有一个扩展方法System.Linq.Enumerable.Contains

string[]IEnumerable<string>,因此您可以使用它。

using System.Linq;添加到文件顶部以使用它。

https://msdn.microsoft.com/en-us/library/system.linq.enumerable.contains(v=vs.110).aspx

答案 4 :(得分:0)

如果要使用区分大小写的比较,可以尝试使用StringComparer:

示例:

    string [] array =  ....;
    array.Contains("str", StringComparer.OrdinalIgnoreCase);
        
bool val = actionContext.HttpContext.Request.Headers.AllKeys.Contains(AccessTokenHeaderName, StringComparer.OrdinalIgnoreCase);