Evet öyle. Her zamanki gibi, C# dil belirtimi, kesin kaynağıdır. C 3. spec itibaren
, bölüm 7.12 (v4 Spec burada gerçekten alakalı olmayan dinamik detaya gider yerine 4 v3):
ifade a ?? b
tipi hangi bağlıdır örtük dönüşümler, işlenenlerin türleri arasında kullanılabilir. Tercih sırasına göre, a ?? b A, A veya B'dir, burada A, a'dır, B, b'nin tipidir (b'nin bir türü vardır) ve A A, A'nın null bir tür olması durumunda A'nın temel tipidir veya aksi takdirde A'dır. . Bir değilse
- null bir tipi ya da bir referans tipi, bir derleme hatası oluşur: Özel olarak ise,
a ?? b
işlenir.
- A, null bir türse ve b ile A0 arasında örtük bir dönüşüm varsa, sonuç türü A0'dır. çalışma zamanında, ilk değerlendirilir. Bir boş değilse, A0 yazmak için bir sarılmış ve bu sonuç olur. Aksi takdirde, b değerlendirilir ve A0 türüne dönüştürülen ve sonuç olur.
- Aksi takdirde, örtük bir dönüşüm b'den A'ya varsa, sonuç türü A'dır. Çalışma zamanında, ilk önce bir değerlendirilir. Eğer bir null değilse, sonucu olur. Aksi takdirde, b değerlendirilir ve A türüne dönüştürülen ve sonuç olur.
- Aksi takdirde, b B türünde ve A0 ile B arasında örtük bir dönüşüm varsa, sonuç türü B'dir. Çalışma zamanında, a ilk olarak değerlendirilir. A, değilse, A0 (A ve A0 aynı türde değil) yazıp B türüne dönüştürülür ve bu sonucuna dönüşür. Aksi halde, b değerlendirilir ve sonuç olur.Aksi takdirde, a ve b uyumlu değildir ve bir derleme zamanı hatası oluşur.
, ikinci, üçüncü ve dördüncü mermilerin ilgili olanlardır.
Eğer kullanacağınız başına derleyici gerçeğin fiili kaynak olup olmadığı konusunda vardı edilecek bir felsefi tartışma var ... o yapmak demek ne bir dili hakkında gerçektir veya şu anda kullanıyor mu?
Ayak notuna ... Bence hepimiz Eric Lippert'in tadını çıkarıyoruz :) –
@Matthew: Pek çok nedenden biri, evet. Eric'in ilginç bir yönü, hem * hem de * derleyicinin insan enkarnasyonu olarak hareket edebilmesidir ... –