Var param olmadan TryParse


94

C # 6.0'daki yeni bir özellik, TryParse yöntemi içinde değişken bildirmeye izin verir. Bazı kodum var:

string s = "Hello";

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

}

Ancak derleme hataları alıyorum: görüntü açıklamasını buraya girin

Neyi yanlış yapıyorum? Not: proje ayarlarında C # 6.0 ve .NET framework 4.6 ayarlanmıştır.

Yanıtlar:


155

C # 6.0'daki yeni bir özellik, TryParse yöntemi içinde değişken bildirmeye izin verir.

Bildirim ifadeleri C # 6.0'dan kesildi ve son sürümde gönderilmedi. Şu anda bunu yapamazsınız. GitHub üzerinde bunun için bir öneri yoktur C # 7 için (ayrıca bkz bu ileride başvurmak üzere).

Güncelleme (07/03/2017)

C # 7'nin resmi sürümü ile aşağıdaki kod derlenir:

string s = "42";

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

4
Bilgi için çok teşekkürler! Son sürümden kesilmiş olması üzücü, çünkü benim için güzel bir özellik.
Anton23

2
@ Anton23 C # 7'ye girmesini umalım o zaman :)
Yuval Itzchakov

2
Bu benim için en çok beklenen özellikti.
Tuyen Pham

En azından C # 7 / VS2017'de.
ssmith

1
Kelimenin tam anlamıyla bir cümle daha okuyamadın mı? C # 7'yi belirten cevap, aynı zamanda 6.0'dan kesildiğini de açıklıyor. İnsanlar hala C # 6.0'da gelişiyor
Fus Ro Dah

15

Sadece tesadüfen öğrendim, vs2017'de, bunu kısaca yapabilirsiniz:

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

2
Bu, atma operatörüdür.
Patrick Hofman

9

Bu, C # 7'nin yeni bir özelliğidir ve genellikle desen eşleştirmeyle birlikte kullanılan çok hoş bir özelliktir. Bu özellik ve daha pek çoğu, C # 7.0'daki Yenilikler C # ekip blogunda duyurulmuştur .

Takımın burada başarmaya çalıştığı şey daha fazla akışkan koddur. Dışarıdaki değişkenlerin listesinin kullanım dışı kaldığı için çok uzadığı bazı durumları hatırlıyor musunuz? Hızlı bir örnek:

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*/ }

Sorunu gördün mü? Tüm o değişkenlerin orada hiçbir şey yapmadan oturması faydasızdır. C # 7 kullanılarak satır sayısı yarıya indirilebilir:

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*/ }

Yalnızca satır sayısı en aza indirilmekle kalmaz, aynı zamanda kapsamda olmasını istemediğiniz gereksiz değişkenler listesi de yoktur. Bu, kullanmak istemediğiniz, ancak şimdi size görünen bir değişkeni kullanmanızı engeller.

Bu özellik, switchbu kodda olduğu gibi (yukarıdaki koddan farklı bir davranışa sahiptir!)

switch (o)
{
    case int i: { /*use i*/ break; }
    case Guid g: { /*use g*/ break; }
    case DateTime d: { /*use d*/ break; }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.