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

  • atKristaBradford

    atKristaBrad

    4 Aralık 2010
  • FUNKER530 - Veteran Community & Combat Footage

    FUNKER530 -

    25 Ocak 2007
  • Tutorials Junction

    Tutorials Ju

    1 Ocak 2014