SORU
7 ŞUBAT 2010, Pazar


Koşullu operatör olamaz dökme örtülü olarak?

# Cilvesi bu küçük C ile biraz tıkandım:

Verilen değişkenler:

Boolean aBoolValue;
Byte aByteValue;

Aşağıdaki derler:

if (aBoolValue) 
    aByteValue = 1; 
else 
    aByteValue = 0;

Ama bu olmaz:

aByteValue = aBoolValue ? 1 : 0;

Hata diyor ki: "Cannot convert türü örtülü olarak''''." bayt int

Ve tabii ki, bu ucubeyi derleme:

aByteValue = aBoolValue ? (byte)1 : (byte)0;

Burada neler oluyor?

DÜZENLEME:

VS2008 C# 3.5 kullanılarak

CEVAP
7 ŞUBAT 2010, Pazar


Bu oldukça sık sorulan bir soru.

C#, neredeyse her zaman dışarıdan içeriden bir sebep. Gördüğünüzde

x = y;

x, y tipi nedir, tipi ve y tipi tayini x ile uyumlu olup olmadığını öğrenmeliyiz. Ama y tipi çalışma dışarı çıktığımızda x türü ne olduğunu biliyoruz aslında kullanmıyoruz.

Birden fazla x olabilir, çünkü:

void M(int x) { }
void M(string x) { }
...
M(y); // y is assigned to either int x or string x depending on the type of y

Bizgerekifade türünü bulmak mümkünolmadanatanmış olmanın ne olduğunu bilmek. Tür bilgi akışıdışarıbir ifade, değiliçinebir ifade.

Çalışmak, bu tür koşullu ifade, biz iş türü sonucu ve alternatif ifadeler, çekme, daha genel iki tür, ve o olur bu tür koşullu deyim. Sizin örnekte, koşullu ifadesinin tipi "int", ve değil, sürekli bir durum ifade sürekli doğru ya da sürekli yanlış değilse). Sabit olduğundan, sonuç sabit değildir; ne zaman derleyici sebep sadece değerleri türlerinden değil, byte atayabilirsiniz.

Tüm bu kurallara istisna lambda ifadeleri yazın bilgiyoklambda içine içerik akışı. Bu mantık doğru almak çok zor oldu.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • circuschina

    circuschina

    16 Mart 2007
  • infodirt

    infodirt

    11 Mart 2009
  • LAHWF

    LAHWF

    5 Kasım 2009