SORU
15 AĞUSTOS 2013, PERŞEMBE


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
15 AĞUSTOS 2013, PERŞEMBE


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 x y bir tip vardır, ve her ikisi de x y ö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:

x türü X y 32* *türü vardır

  • Eğer bir örtük dönüştürme (madde 6.1) var X Y ama Y X Y tür koşullu deyim.

  • Eğer bir örtük dönüştürme (madde 6.1) var Y X ama X Y X tü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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • FF Radio

    FF Radio

    16 Mayıs 2008
  • Rugiagialia

    Rugiagialia

    1 Ocak 2008
  • WiseOwlTutorials

    WiseOwlTutor

    21 EKİM 2011