SORU
20 Mayıs 2014, Salı


Neden numaralandırma değerleri 0.0, ama 1.0 değiştirebilirim?

Sadece merak ettiğim için soruyorum: neden 0.0 bir numaralandırma türü, ama 1.0 olmayan bir değişkene atayabilir miyim? Şu koda bir göz atalım:

public enum Foo
{
    Bar,
    Baz
}

class Program
{
    static void Main()
    {
        Foo value1 = 0.0;
        Foo value2 = 1.0;   // This line does not compile
        Foo value3 = 4.2;   // This line does not compile
    }
}

Sayısal türleri ve numaralandırma değerleri arasında dönüşüm sadece atmalarını üzerinden izin verildiğini sanıyordum. Main 2 satır derleme böylece Foo value2 = (Foo) 1.0; yazabilirim. Neden değeri C 0.0 için bir istisna var# mı?

CEVAP
20 Mayıs 2014, Salı


0.0 kullanabileceğiniz bir böcek. Derleyici örtük olarak sadece 0 olarak sıfır değeri ile tüm sabit ifade davranır.

ŞimdidoğruC bölüm 6.1.3 göre numaralama 0 int sabit bir ifade, örtülü bir dönüşüm sağlamak için derleyici için# 5 özellikler:

Örtülü bir numaralandırma dönüşüm numaralama-type olan null tipi herhangi bir numaralama-herhangi bir türü için ve dönüştürülecek ondalık tamsayı literal 0 verir. İkinci durumda dönüşüm numaralama tipi ve kaydırma sonucu (§4.1.10) temel dönüştürme tarafından değerlendirilir.

C ile görüştüm# daha önce bu konuda takım: kaldırılmış olması hoşlarına giderdikaza sonucunumaralandırma değerleri için 0.0 (ve aslında 0.0 m 0.0 f) dönüştürme, ama ne yazık ki hiçbir yerde asla izin verilmeyecek olsa da çok fazla kod kırıldı. - anlıyorum.

mcs Mono derleyici buna rağmen bu kayan nokta dönüşüm tüm yasaklıyoryokizin:

const int Zero = 0;
...

SomeEnum x = Zero;

Zero ama sabit bir ifade olmasına rağmendeğilbir tamsayı sabit ondalık.

Ben hiç şaşırmadım görmek için C# özelliklerde değişiklik geleceği için izin herhangi bir tamsayı sabit ifadesi ile bir değer 0 (yani taklit mcs), ama yapmadım bekliyoruz kayan nokta dönüşüm için şimdiye kadarresmendoğru olabilir. (C yanlış önce geleceğini tahmin ediyorum#, tabii ki...)

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • PaulGBelliveau

    PaulGBellive

    5 Mart 2009
  • Vicious Computers

    Vicious Comp

    14 EKİM 2006
  • Vortez

    Vortez

    27 Temmuz 2009