2009-11-28 16 views
31

intInt32 ile eş anlamlı iseC# int, Int32 ve enums

enum MyEnum : Int32 
{ 
    Value = 1 
} 

neden derlenmiyor? Xzx25

enum MyEnum : int 
{ 
    Value = 1 
} 

olarak, imleci int kelimesinin üzerine getirse bile struct System.Int32 öğesini görüntüleyecektir.

+0

Derleme zamanında hata nedir? – Donnie

+2

@Donnie: Türü bayt, sbyte, kısa, ushort, int, uint, uzun veya beklenen ulong. Görünüşe göre, Net'deki bir kısıtlama, kullanıcıyı bir numarada yalnızca sınıf adları yerine anahtar sözcükleri kullanmaya zorlar. – Webleeuw

+0

İlginç. Bir şey öğrendim, yay! – Donnie

cevap

29

Temeldeki tür aslında aynıdır, ancak derleyici tam olarak aynı ada sahip olacak şekilde bağlıdır. Bu, ayrışmaya dayanan bir derleme hatasıdır. C# dilbilgisi şartnamesine ve takma ad olarak takma adı verilen temel türlere (ör. 'Int', 'birim' ... vb.) Baktım. Ayrıştırıcı belirli dizeleri integral-tür dilbilgisi kuralından bekler.

hata hem enum Enum : intenum Enum : Int32 aynı çalıştırarak yine bir ayrıştırma hatası olup.

Ben adımı ayrıştırma bu sınırı zorlamak nedenini bilmiyorum ama ben tahmin deneyebilirsiniz: Int32 diğer şey gerçek int yapı atıfta bulunuyor olabilir bir anahtar kelime olmadığından. Ayrıştırıcı, her bir taban türü için farklı AST oluşturmak için türü bilmesi gerekiyorsa, bu, anahtar sözcük olmayan belirteciye bağlı olamaz. o bağlam birçok bilgi gerektirdiğinden

C# şartname açık takma olarak System.Int32int anahtar kelime tanımlar olsa da, adım ayrıştırma sırasında açık tip (Int32) hakkında bu bilgileri almak için hala bir sorun var Bu aşamada çıkarılamaz.

+1

onlar bahvior değişmiyor gerekçelerini açıklamak tanıştığı bu MS Bağlan hata Bkz bkz : http://connect.microsoft.com/VisualStudio/geribildirim/ayrıntılar/557064/c-enum-beyan okunur-kabul-ValueType-takma-örneğin-kısa int-uzun yerine-of-net-ValueType-örneğin-sistem-int16 sistemi tarafından Microsoft Connect bağlantılarına erişilemeyen int32-system-int64 –

+0

@MichaelEdenfield. Ödeme yapabildiğinizi açıkça görebilir misiniz? Bu hatayı aldım 'İstediğiniz içerik bulunamıyor ya da görüntüleme izniniz yok. Bu sayfaya yanlışlıkla ulaştığınızı düşünüyorsanız, sorunu bildirmek ve bu kimliği e-postanıza eklemek için sayfanın en üst kısmındaki Yardım bağlantısını tıklatın: e4c85df6-9343-4045-88d2-fc2d64bd01de –

+1

Hayır, maalesef belirli noktalardan sonra bağlantı linklerini geçer. Hata, "int" bir anahtar kelime ve "Int32" bir türdü ve ayrıştırıcı geçerli olarak enum taban türü olarak geçerli bir "anahtar kelime" bekliyordu. Davranışı değiştirmek, anahtar kelimeden türetme sırasına göre enum-türü ayrıştırma adımlarının sırasını değiştirmeyi gerektirir ve küçük, küçük bir yarar için büyük bir değişikliktir, bu nedenle muhtemelen gerçekleşmeyecektir (başka ilgili değişiklikler olmadıkça) Aynı bölgede.) –

14

Tanıdık merakı ... dil spec durumları (14.1):

açıkça byte, SByte, kısa, USHORT, int, uint uzun veya ulong altta yatan bir tür ilan edebilir Bir enum beyanı. Char'ın temel bir tür olarak kullanılamayacağını unutmayın. Altta yatan bir türü açıkça bildirmeyen bir enum bildiriminin altında yatan bir tür int vardır.

Ama int beri

olduğu genellikle sadece o da işe düşünmeye mantıksız değil ... ama aslında öyle değil System.Int32 için bir takma. Genelde büyük bir sorun değil, daha az ilgi çekici bir şey değil.