簡體   English   中英

字符串[*,*]不包含“包含”的定義

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM