我有一个函数,使用.Contains
检查二维字符串数组是否包含特定的字符串值。正在使用System.Linq
,似乎是类似问题中的问题,但我仍然会收到以下错误:
'string [,]'不包含'Contains'和。的定义 最佳扩展方法过载 'Queryable.Contains(IQueryable,string)'需要一个 “IQueryable”类型的接收器。
无论我将比较值更改为什么,此错误都会持续存在。错误发生的上下文是
string comparisonString = " ";
bool victoryRequirement = mineArray.Contains(comparisonString);
我希望有人能告诉我为什么会出现这种错误,以及我是否能够将Contains
用于此目的。我怀疑二维阵列部分有问题,但我不是那么经验。
答案 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");