繁体   English   中英

“字符串 []”不包含“包含”的定义

[英]'string[]' does not contain a definition for 'Contains'

完整的错误代码:

错误 CS1929 'string[]' 不包含 'Contains' 的定义,并且最佳扩展方法重载 'Queryable.Contains(IQueryable, TSource)' 需要类型为 'IQueryable' 的接收器

  string[] terms = new string[31];

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

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

}

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

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

Array ( string[] ) 实现IList ,因此应该具有Contains(object o)方法。 但是实现是显式的,这意味着只有当类被视为接口时才能访问该方法:

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

有一个扩展方法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

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

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

添加

using System.Linq; 

也有帮助

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# 中,列表在大多数情况下都优于数组。

以下将起作用:

using using System.Linq; //Added to top of code
...
...
string[] someList = {"First", "Second", "Third"}; //In your method

bool result = someList.Contains("First")) //equals true;
bool result2 = someList.Contains("Fourth")) //equals false;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM