2017-05-17 40 views
5

Numaraya bir dizeyi ayrıştırmak için TryParse kullanıyorum. Değişken değeri varsayılan değer ile başlatmak için bir çözüme ihtiyacım var, Yani TryParse dönüştüremediğinde varsayılan değerimi elde ederim.Varsayılan değer C# 7 çıkış değişkenlerine nasıl başlatılır?

long.TryParse(input.Code, out long Code = 123); 
//Error CS1525 Invalid expression term '=' 

Ben değişkenler standart dışarı C# 7 kullanmak kesinlikle istiyorum: Burada

kodudur.

+4

'varsayılan değerle başlat' demek istiyorsun? Bir çıkış parametresinin değeri, yöntem tarafından ayarlanır. Hata durumunda bir değer ayarlamak isterseniz, gerekli kodu yazmanız gerekir. Bu arada * değişmedi. Parametreler her zaman çalışır –

+0

@PanagiotisKanavos Üzgünüm parametreyi yanlış anladım .. –

+0

Bunun bir dil açısından bir anlam ifade ettiğine inanıyorum - _ "Eğer standardın neden olmasa da" _ diline eklenen her özellik _ tasarlanıp uygulanacak ve sözdizimine karmaşıklık katacak - her şeyi yapmak için yeterli zamanınız yok, başka bir yerde başka şeyleri kırmadığınızdan emin olun. –

cevap

6

out parametre kendisi varsayılan bir değer alamaz iken, size Sadece bir üçlü ifadeyle out parametreyi birleştirmek C# 7'de tek ifade ile ne yapmak istediğinizi elde edebilirsiniz: ne yapıyoruz

var code = long.TryParse(input.Code, out long result) ? result : 123; 
4

Bunu yapamazsınız ... .NET çalışma zamanı, long.TryParse'un "başarı" veya "başarısızlığı" ile ilgili hiçbir şey bilmiyor. Yalnızca TryParse'un bool dönüş değeri olduğunu ve TryParse tamamlandıktan sonra out değişkeninin başlatılacağını bilir. true ve "result'da iyi bir değer var" ve false arasında bir ilişki yoktur ve "result'da iyi bir değer yoktur".

açıkça hale getirmek için, olabilir: şimdi

static bool NotTryParse(string s, out long result) 
{ 
    return !long.TryParse(s, out result); 
} 

Ve? Varsayılan değeriniz ne zaman kullanılmalıdır?

+0

Evet .. değişkenleri yanlış anladım gibi görünüyor! –

+3

@MohsenSarkar kötü hissettirecek bir şey yok. * Çoğu kişi, "değişkenleri" ve tümüyle ilgili şeyi yanlış anlar. Bağlam için, "out" sadece "ref" ile aynıdır, sadece bazı derleyici tweaks yeniden "kesin atama" ile. Ve 10'dan 9 defa: insanlar "ref" ne demek istediğini anlıyorlar. Burada yapmaya çalıştığım bir nokta: http://blog.marcgravell.com/2017/04/spans-and-ref-part-1-ref.html –