Secara historis, ketika berkembang di .Net saya tidak bisa menduplikasi nama variabel dalam lingkup bersarang. Namun, setelah baru-baru ini memperbarui Visual Studio 2019 ke versi 16.4.2 saya perhatikan bahwa nama variabel dapat diduplikasi dalam lingkup bersarang.
Sebagai contoh:
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
Mengapa ini tiba-tiba diizinkan?
Pertanyaan tindak lanjut: Jika ini adalah "fitur" bahasa baru, apakah ada cara untuk mengkonfigurasi Visual Studio untuk terus istirahat ketika variabel diduplikasi dalam lingkup bersarang?
c#
.net-core
visual-studio-2019
masterjeef
sumber
sumber
test
variabel yang sama karena tipe data sama. coba mendeklarasikantest
variabel sebagaiint
contoh.var test = 12345;
saya pikir Anda harus mendapatkan kesalahan kompilasi. (Saya belum mencobanya)test
seperti yang disarankan tidak berpengaruh. Anda dapat mencobanya di Fiddle yang ditautkan dalam pertanyaan.Jawaban:
Ini adalah fitur baru di C # 8.0, fungsi lokal dan parameter lambda dapat membayangi nama luar.
sumber
tebakan saya adalah bahwa fungsi pilih sedang dikompilasi sebagai statis karena tidak memiliki koneksi ke tubuh metode host. itu hanya mencetak dan mengembalikan item yang dimaksud. ini tidak memerlukan akses apa pun ke metode dan karena itu, alasan pengoptimalan dapat dipindahkan dari badan metode dan diletakkan sendiri dalam lingkup global.
dan dalam hal ini, variabel uji itu adalah variabelnya sendiri dan tidak memiliki koneksi ke variabel tes di atas.
untuk mencegah hal ini, Anda tidak bisa meminta vs untuk melemparkan kesalahan saat itu terjadi, Anda hanya perlu mengubah nama variabel secara manual.
sumber