[英]string[*,*] does not contain a definition for 'Contains'
我有一個函數,使用.Contains
檢查二維字符串數組是否包含特定的字符串值。 正在使用System.Linq
,似乎是類似問題中的問題,但是我仍然收到以下錯誤:
'string [ , ]'不包含'Contains'的定義,最佳擴展方法重載'Queryable.Contains(IQueryable,string)'需要類型為'IQueryable'的接收器。
無論我將比較值更改為什么,此錯誤都會持續存在。 錯誤發生的上下文是
string comparisonString = " ";
bool victoryRequirement = mineArray.Contains(comparisonString);
我希望有人可以告訴我為什么會發生此錯誤,以及我是否能夠為此目的使用“ Contains
”。 我懷疑二維數組部分出錯,但是我沒有那么經驗。
盡管Adil Mammodov的答案似乎很奏效,但這不是很籠統。 我更願意將其編寫為更短,更靈活的代碼:
public static IEnumerable<T> ToSequence<T>(this T[,] items)
{
return items.Cast<T>();
}
現在,您可以簡單地使用ToSequence
將數組轉換為序列,然后對其應用序列運算符。
myItems.ToSequence().Contains(target);
另外,當我們在查看您的代碼時:嘗試根據事物的用途而不是其類型來命名事物。 如果事物名稱中包含“ Array”和“ String”,則它們可能具有更好的,更具描述性的名稱。 該類型已經在類型中進行了注釋。
您可以為二維字符串數組編寫自己的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方法。
實際上這有效:
var c=myArray.Cast<string>().Select(x=>x).Contains("Three");
甚至更容易:
var c=myArray.Cast<string>().Contains("Three");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.