string [*,*]不包含'Contains'

时间:2016-09-25 14:16:40

标签: c# linq

我有一个函数,使用.Contains检查二维字符串数组是否包含特定的字符串值。正在使用System.Linq,似乎是类似问题中的问题,但我仍然会收到以下错误:

  

'string []'不包含'Contains'和。的定义   最佳扩展方法过载   'Queryable.Contains(IQueryable,string)'需要一个   “IQueryable”类型的接收器。

无论我将比较值更改为什么,此错误都会持续存在。错误发生的上下文是

string comparisonString = " "; 
bool victoryRequirement = mineArray.Contains(comparisonString);

我希望有人能告诉我为什么会出现这种错误,以及我是否能够将Contains用于此目的。我怀疑二维阵列部分有问题,但我不是那么经验。

3 个答案:

答案 0 :(得分:13)

尽管Adil Mammodov的答案似乎有效,但它并不是很普遍。我宁愿把它写得更短更灵活:

public static IEnumerable<T> ToSequence<T>(this T[,] items)
{
  return items.Cast<T>();
}

现在您只需使用ToSequence将数组转换为序列,然后对其应用序列运算符。

myItems.ToSequence().Contains(target);

此外,在我们查看您的代码时:尝试根据他们的工作来命名,而不是他们的类型。如果在事物名称中有“数组”和“字符串”,它们可以有更好的,更具描述性的名称。该类型已在类型中注释。

答案 1 :(得分:2)

您可以为二维字符串数组编写自己的contains方法,如下所示:

public bool TwoDimensionalContains(string[,] inputArray, string comparisonString)
{            
    for (int i = 0; i < inputArray.GetLength(0); i++)
    {
        for (int j = 0; j < inputArray.GetLength(1); j++)
        {                    
            // If matching element found, return true
            if (comparisonString.Equals(inputArray[i, j]))
                return true;
        }
    }
    // No matchincg element found, return false
    return false;
}

然后使用如下:

string[,] myArray = new string[2, 2]
{
    { "One", "Two" },
    {  "Three", "Four" }
};

bool contains = TwoDimensionalContains(myArray, "Three");

您还可以使用TwoDimensionalContains方法,扩展方法将其用作其他Linq方法。

答案 2 :(得分:1)

实际上这有效:

var c=myArray.Cast<string>().Select(x=>x).Contains("Three");

更容易:

var c=myArray.Cast<string>().Contains("Three");