[英]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
,是不是很清楚x
是Match
?
不應該很清楚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.