Koşullu ifade türü' ve < '; boş> int arasında örtülü dönüşüm yok belirlenemiyor;
Neden bu derleme deÄŸil mi?
int? number = true ? 5 : null;
Tür koşullu ifade edemiyor 'int' <boş> . arasında örtülü dönüşüm yok çünkü belirlenecek
CEVAP
Spec (§7.14) şartlı ifade için b ? x : y, üç ihtimal var, ya da x y her iki türü olduğunu söylüyorvebelliiyi koşullarkarşılanması, x y Bir tür vardırvebelliiyi koşullaryerine, bir derleme zamanı hatası oluşur. Burada, "belirli şartlarda belirli dönüşümleri mümkündür, aşağıda detayları biz alacaksınız." anlamına gelir
Şimdi spec ilgili kısmına dönelim:
EÄŸer sadece
xybir tip vardır, ve her ikisi dexyörtük olarak dönüştürülebilir için bu tip, bu tür koşullu deyim.
Sorun burada
int? number = true ? 5 : null;
koşullu sonuçların sadece bir türü vardır. Burada x int bir edebi ve y yok nulldeğilbir türü varnull int Bir değil, örtük olarak dönüştürülebilir1. Bu nedenle, "belirli şartlarda" bir araya geldi değil, bir derleme zamanı hatası oluşur.
Yokbu yaklaşık iki yolu vardır:
int? number = true ? (int?)5 : null;
Burada x y tek bir türü olduğu hala durumda. null unutmayınhalabir türü yok derleyici (int?)5 null int? (madde 6.1.4 ve madde 6.1.5) örtük olarak dönüştürülebilir çünkü bu ile herhangi bir sorun olmaz henüz.
DiÄŸer yol ise belli:
int? number = true ? 5 : (int?)null;
ama şimdi bir okumalıyızfarklıspec fıkra bu sorun neden anlamak için:
xtürüXy32* *türü vardır
Eğer bir örtük dönüştürme (madde 6.1) var
XYamaYXYtür koşullu deyim.Eğer bir örtük dönüştürme (madde 6.1) var
YXamaXYXtür koşullu deyim.Aksi takdirde, hiçbir ifade türü belirlenebilir ve bir derleme zamanı hatası oluşur.
Burada x int y 46* *türü türüdür. int int? örtülü dönüşüm yok ama ifade türü int? int? int örtülü bir dönüşüm var.
1Sol tarafta türü koşullu deyim, bu karışıklık bir ortak kaynak burada tipini belirlemede göz ardı olduğunu da unutmayın.

Örtülü dönüşüm numaralandırma türü ...
OAuth 2'de örtülü hibe yetkilendirme t...
C arasında ifade farklılıkları ağaç# v...
Biz c çeteleler örtülü dönüşüm tanımla...
Kare arasında metin ayıklamak için nor...