TryParse tanpa var param


93

Sebuah fitur baru di C # 6.0 memungkinkan untuk mendeklarasikan variabel di dalam metode TryParse. Saya punya beberapa kode:

string s = "Hello";

if (int.TryParse(s, out var result))
{

}

Tetapi saya menerima kesalahan kompilasi: masukkan deskripsi gambar di sini

Apa yang saya lakukan salah? PS: dalam pengaturan proyek C # 6.0 dan .NET framework 4.6 ditetapkan.

Jawaban:


152

Sebuah fitur baru di C # 6.0 memungkinkan untuk mendeklarasikan variabel di dalam metode TryParse.

Ekspresi deklarasi dipotong dari C # 6.0 dan tidak dikirim pada rilis final. Anda saat ini tidak dapat melakukan itu. Ada proposal untuk itu di GitHub untuk C # 7 (lihat juga ini untuk referensi di masa mendatang).

Perbarui (07/03/2017)

Dengan rilis resmi C # 7, kode berikut dikompilasi:

string s = "42";

if (int.TryParse(s, out var result))
{
     Console.WriteLine(result);
}

4
Terima kasih banyak atas informasinya! Sayang sekali itu dipotong dari rilis final, bagi saya itu fitur yang bagus.
Anton23

2
@ Anton23 Mari berharap itu masuk ke C # 7 lalu :)
Yuval Itzchakov

2
Itu adalah fitur yang paling saya harapkan.
Tuyen Pham

Setidaknya ada di C # 7 / VS2017.
ssmith

1
Anda tidak dapat membaca, secara harfiah, satu kalimat lagi? Jawabannya, yang menyatakan C # 7, juga menjelaskan bahwa ia dipotong dari 6.0. Orang masih mengembangkan di C # 6.0
Fus Ro Dah

15

Baru saja diketahui secara tidak sengaja, di vs2017, Anda dapat melakukan ini untuk singkatnya:

if (!Int64.TryParse(id, out _)) {
   // error or whatever...
}

2
Itu adalah operator pembuangan.
Patrick Hofman

9

Itu adalah fitur baru dari C # 7, yang merupakan fitur sangat bagus yang sering digunakan dalam hubungannya dengan pencocokan pola. Fitur ini, dan banyak lagi, diumumkan di blog tim C # What's New in C # 7.0 .

Hal yang coba dicapai tim di sini adalah kode yang lebih lancar. Apakah Anda ingat beberapa kasus di mana daftar variabel menjadi sangat panjang dan tidak berguna? Contoh singkatnya:

int i;
Guid g;
DateTime d;
if (int.TryParse(o, out i)) { /*use i*/ }
else if (Guid.TryParse(o, out g)) { /*use g*/ }
else if (DateTime.TryParse(o, out d)) { /*use d*/ }

Lihat masalahnya? Tidak ada gunanya memiliki semua variabel di luar itu yang tidak melakukan apa-apa. Jumlah garis dapat dipotong menjadi dua dengan menggunakan C # 7:

if (int.TryParse(o, out int i)) { /*use i*/ }
else if (Guid.TryParse(o, out Guid g)) { /*use g*/ }
else if (DateTime.TryParse(o, out DateTime d)) { /*use d*/ }

Tidak hanya jumlah baris yang diminimalkan, juga tidak ada daftar variabel yang tidak perlu dalam cakupan di mana Anda tidak ingin memilikinya. Ini mencegah Anda untuk menggunakan variabel yang tidak ingin Anda gunakan, tetapi sekarang terlihat oleh Anda.

Fitur ini juga berguna dengan pencocokan pola dalam switchpernyataan, seperti dalam kode ini (yang memiliki perilaku berbeda dari kode di atas!):

switch (o)
{
    case int i: { /*use i*/ break; }
    case Guid g: { /*use g*/ break; }
    case DateTime d: { /*use d*/ break; }
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.