2010-10-05 28 views
6

Olası Çoğalt:
What is the “??” operator for?"??" ifadesinin kullanımı nedir?

"??" kullanımı ne olduğunu açıklayınız kodun altında ve "??" için kullanılır.

if ((this.OrderDate ?? DateTime.MinValue) > DateTime.Today) 

{ e.Description = "Sipariş Tarihi gelecekte olmamalıdır."; yanlış döndürür; }

Yukarıdaki kod http://nettiers.com/EntityLayer.ashx

Teşekkür yer almaktadır.

+3

'??' olarak aramak için zor olabilir böyle ama ararken "C# sözdizimi" veya "C# operatörleri" oldukça hızlı bir şekilde cevapları alır. –

cevap

9

(Bu bir kopya, ama aramak zor, bu yüzden gelecekteki aramalar için daha başka bir hedef sağlayacak kadar mutluyum ...)

O null-coalescing operator bu. Esasen, ilk işleneni değerlendirir ve sonuç null ise (boş bir değer türü için boş bir başvuru veya boş değer), o zaman ikinci işleneni değerlendirir. Sonuç, en son hangi işlenenin etkili olarak değerlendirildiğidir.

Not onun çağrışımsal nedeniyle yazabilirsiniz o: E1, E2, E3 ve E4 tip int? ifadeleridir

int? x = E1 ?? E2 ?? E3 ?? E4; 

eğer - bu E1 ve ilerleme ile başlayacak bir sivil bulana kadar Boş değer.

İlk işlenenin null yapılabilen bir türü olması gerekir, ancak ikinci bir işleneni geçersiz olmayan olabilir; bu durumda, genel ifade türü null olarak yapılamaz. Örneğin, E4 hala int? o zaman x olmayan null yapabilirsiniz olan tip int (ancak geri kalan her bir ifadesidir varsayalım:

int x = E1 ?? E2 ?? E3 ?? E4; 
+0

gerçekten bilmek yararlıdır - çoğu programlama dilinde çalışır mı? –

+0

@Thomas: Nope, sadece C# bildiğim kadarıyla. Benzer bir şey, ve diğer bazı diller boş güvenli bir deferencing var –

+0

@Thomas Clayson: Temelde [C# ve Perl] (http://en.wikipedia.org/wiki/Null_coalescing_operator) 5.10 sürümünde bir null-birleştirici operatör var (Perl sözdizimi '//' dir) –