完整的错误代码:
错误CS1929'字符串[]'不包含'包含'的定义,并且 最佳扩展方法重载 'Queryable.Contains(IQueryable,TSource)'需要一个 类型为“ IQueryable”的接收者
string[] terms = new string[31];
我正在尝试查看数组是否在Excel文件中包含某些内容。 (使用互操作)
if (terms.Contains(xlWorkSheet.Cells[1, i1 + 1].Value.ToString())) ;
{
}
为什么“包含”在这里不起作用?
我进行了搜索,很明显,这与类型不同有关,但是在这种情况下,确实如此。它们都是字符串。
答案 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);