【问题标题】:'string[]' does not contain a definition for 'Contains'“字符串 []”不包含“包含”的定义
【发布时间】:2018-08-08 18:43:53
【问题描述】:

完整的错误代码:

错误 CS1929 'string[]' 不包含 'Contains' 的定义和 最好的扩展方法重载 'Queryable.Contains(IQueryable, TSource)' 需要一个 'IQueryable' 类型的接收者

  string[] terms = new string[31];

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

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

}

为什么 Contains 在这里不起作用?

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

【问题讨论】:

  • 确保您是using System.Linq。
  • @SebastianHofmann 我已经有了。
  • 它们都是字符串。不,它们不是。变量terms 不是字符串。它是一个字符串[]。您不能像搜索字符串一样搜索字符串数组。你想做什么?

标签: c#


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 问题是为什么编译器绑定到Queryable.Contains而不是Enumerable.Contains?
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      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&lt;string&gt;。有了它,您可以使用 List.Contains() ,就像您在示例中尝试做的那样。在 C# 中,列表在大多数情况下都优于数组。

      【讨论】:

      • 其实有Contains(object o)方法,因为它实现了IList
      【解决方案5】:

      添加

      using System.Linq; 
      

      也有帮助

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-07
        • 1970-01-01
        • 1970-01-01
        • 2018-08-14
        • 2019-10-06
        • 1970-01-01
        • 1970-01-01
        • 2021-12-10
        相关资源
        最近更新 更多