![](/img/trans.png)
[英]Why does c# compiler allow incorrect match of return value type and variable type?
[英]Why does the C# compiler allow a duplicated variable in nested scope?
從歷史上看,在 .Net 中開發時,我無法在嵌套范圍內復制變量的名稱。 但是,在最近將 Visual Studio 2019 更新到版本 16.4.2 后,我注意到變量名可以在嵌套范圍內重復。
例如:
var test = "hello";
Console.WriteLine(test);
var things = new []{"one", "two", "three"};
things.Select(test => // <- test is duplicated here, normally this breaks compilation
{
Console.WriteLine(test);
return test;
}).ToList();
// output:
// hello
// one
// two
// three
https://dotnetfiddle.net/h85BK4
為什么突然允許這樣做?
后續問題:如果這是一個新的語言“功能”,是否有辦法將 Visual Studio 配置為在嵌套范圍內重復變量時繼續中斷?
這是 C# 8.0 中的一項新功能,本地函數和 lambda 參數可以隱藏外部名稱。
我的猜測是 select 函數被編譯為靜態,因為它沒有連接到主機方法體。 它只是打印並返回有問題的項目。 這不需要對方法的任何訪問,因此,出於優化原因,它可以移出方法主體並在全局范圍內單獨放置。
在這種情況下,該測試變量是它自己的變量,與上述測試變量沒有任何聯系。
至於防止這種情況,您不能告訴 vs 在發生錯誤時拋出錯誤,您只需手動更改變量名稱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.