Bu iki satır aynı, 'vardır? ... :' vs '??'?
Bu iki satır arasında bir fark var mı?
MyName = (s.MyName == null) ? string.Empty : s.MyName
ya
MyName = s.MyName ?? string.Empty
CEVAP
GÜNCELLEME: daha fazla bu konuyu derinlemesine anlatıldığı bir blog yazısı yazdım. http://www.codeducky.org/properties-fields-and-methods-oh-my/
Genellikle aynı sonucu dönecektir. Ancak, bazı durumlarda, sen-ecek deneyim gözle görülür farklar MyName
bir özellik, çünkü MyName
alıcı işlenir iki kez ilk örnek ve yalnızca bir kez ikinci örnek.
Örneğin, iki kez MyName
yürütülmesini performans farklılıkları karşılaşabilirsiniz:
string MyName
{
get
{
Thread.Sleep(10000);
return "HELLO";
}
}
Ya da eğer MyName
durum bilgisi ise iki kez MyName
yürütme farklı sonuçlar alabilirsiniz:
private bool _MyNameHasBeenRead = false;
string MyName
{
get
{
if(_MyNameHasBeenRead)
throw new Exception("Can't read MyName twice");
_MyNameHasBeenRead = true;
Thread.Sleep(10000);
return "HELLO";
}
}
Ya da eğer MyName
farklı bir iş parçacığı üzerinde değiştirilebilir iki kez MyName
yürütülmesini farklı sonuçlar alabilirsiniz:
void ChangeMyNameAsync()
{
//MyName set to null in another thread which makes it
//possible for the first example to return null
Task.Run(() => this.MyName = null);
}
string MyName { get; set; }
Gerçek kod derlendi. İlk üç ifade ile parça:
IL_0007: ldloc.0 // s
IL_0008: callvirt s.get_MyName <-- first call
IL_000D: brfalse.s IL_0017
IL_000F: ldloc.0 // s
IL_0010: callvirt s.get_MyName <-- second call
IL_0015: br.s IL_001C
IL_0017: ldsfld System.String.Empty
IL_001C: call set_MyName
ve burada boş birleşiyor operatör ile parça
IL_0007: ldloc.0 // s
IL_0008: callvirt s.get_MyName <-- only call
IL_000D: dup
IL_000E: brtrue.s IL_0016
IL_0010: pop
IL_0011: ldsfld System.String.Empty
IL_0016: call s.set_MyName
Gördüğünüz gibi üçlü operatör için derlenmiş kodu boş birleşiyor, operatör sadece 1 ise iki telefon özellik değerini almak için yapacak.
Başka bir dil JavaScript dışında ayrac...
Java satır içi işlevleri vardır?...
visual c : aynı çözüm diğer proje dosy...
Yöntem yazın başka bir yöntem olarak a...
Nasıl aynı tabloda satır ve bir kopyas...