簡體   English   中英

C#var關鍵字混淆:類型'對象'不包含...錯誤的定義

[英]C# var keyword confusion: Type 'object' does not contain a definition for… error

我正在編寫這段C#代碼:

static void Main()
    {
        List<string> matches = new List<string>();
        var result = Regex.Matches(myString, @"\((.*?)\)");
        foreach(var x in result)
            matches.Add(x.Groups[1].Value.ToString());
    }

我很驚訝地看到它失敗並顯示以下錯誤消息:

“對象”類型不包含“組”的定義,也沒有找到“對象”類型的擴展方法“組”。

但是,這有效:

foreach(Match x in result)
    matches.Add(x.Groups[1].Value.ToString());

Matches()方法返回一個MatchCollection ,是不是很清楚xMatch

不應該很清楚x是匹配嗎?

可悲的是沒有。

MatchCollection實現IEnumerable ,非通用遺留接口。 它沒有實現IEnumerable<Match> 所以不,那不清楚。

因為foreach循環是在泛型之前的一個時代設計的,所以它會自動將一個強制類型轉換為循環變量類型。 那是

foreach(Match x in result)
  matches.Add(x.Groups[1].Value.ToString());

是道德等同於

IEnumerator enumtor = result.GetEnumerator();
while (enumtor.MoveNext())
{
    Match x = (Match)(enumtor.Current);
    ...

你可以說

foreach(Giraffe x in result)

它會編譯得很好,並在運行時死亡。

當你說

foreach(var x in result)

編譯器發現沒有類型信息可以推斷超出對象,因此它為x的類型提供了它。 然后你的錯誤從那里開始。

我不知道為什么集合沒有更新,以使其更適合靜態類型; 你必須問BCL團隊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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