Soru C # enum bir yarı kolon ile bitmeli mi?


C # 'de, bir enum tanımlamak sonunda bir yarı-kolon ile veya olmadan çalışır gibi görünüyor:

public enum DaysOfWeek
{ Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday} ; //Optional Semicolon?

Bu MSDN'den C # sayfası dışında, noktalı virgülle biten enemleri gösterir. CarOptions.

Herhangi bir kesin referans bulamadım ve her iki yol derleyici uyarıları olmadan çalışmaktadır.

Son bir noktalı virgül olmalı mı, değil mi?


25
2018-01-29 15:39


Menşei


(Tahmin ediyorum @EricLippert cevaplamak için harika bir konumda olacaktı) - abelenky
Hangi standartta "olmalı"? Bana öyle geliyor ki, tamamen ilkel bir rasgele soru sorusu gibi, "ilk satırın sonunda ya da bir sonraki satırın sonunda bir tip tanımının başlangıcında kaşlı ayraç mı olmalı?" ifadeler parantez kullanıyorsaif (b) x(); else y(); vs if (b) { x(); } else { y(); })?" - phoog
Ben tür beyannamelerden sonra yarı benekleri kişisel olarak sevmemek (finalden sonra) } bir class, interface, enumveya struct), Enum içinde son üye sonra ekstra bir virgül tercih ederim. Yani, bitirmeyi tercih ederim ... Sunday, }. Bu yüzden kişisel tercihim: İsteğe bağlı noktalı virgül atla, tüm isteğe bağlı virgülleri dahil et. - Jeppe Stig Nielsen
@abelenky: Yorumunuzu dört yıl öncesine kadar görmedim. C ve C ++ 'nun yarıya ihtiyaç duymasının sebebi burada tartışılmaktadır: stackoverflow.com/questions/785686/.... Bu nedenlerin hiçbiri C # için geçerli değildir. Noktalı virgül bir sınıfın sonunda ya da C # 'daki enum, tiplerin uçlarına semis koyma alışkanlığındaki C ++ geliştiricilere bir nezaket olarak seçilmiştir. Spesifikasyonu uygunluk açısından test ettiğim zamanlar haricinde, bir C # tipi sonunda hiç yarı yarıya koymadım. Bunu bir şekilde ya da diğeri için endişelenmem. - Eric Lippert


Cevaplar:


İtibaren C # belirtimi (archive.org aracılığıyla):

14.1 Enum bildirimleri

Bir enum bildirimi yeni bir enum türünü bildirir. Bir enum bildirimi   enum anahtar kelimesi ile başlar ve adı, erişilebilirliği tanımlar.   altta yatan tür ve enum üyeleri.

  • Öznitellikler seçmek 
  • enum-değiştiriciler seçmek 
  • enum tanımlayıcısı
  • enum-baz seçmek 
  • enum vücut
  • ; seçmek 

Yani tek Sonunda noktalı virgül izin verilir ancak isteğe bağlıdır.


33
2018-01-29 15:41





C # belirtimi isteğe bağlı noktalı virgül için izin verirken, StyleCop için kurallarda kodlama yönergeleri (SA1106) bir noktalı virgül isteğe bağlı ise, kullanılmayacağını dikte.


14
2018-01-29 15:43



Yine de, C # kodunun çoğu MSDN  ve diğer saygın kaynakların son noktalı virgülü vardır (abalenky'nin silinmiş bir cevapta yorumu) - Tim Schmelter
Bu biraz yanık sesini duyacaktır (ve öyle), ancak Microsoft kendi standartları da dahil olmak üzere aşağıdaki standartları takip etmiyor. - doctorless


Enum'u bir sınıf olarak düşünün. Sınıflar noktalı virgüllere ihtiyaç duymaz. Örnekteki noktalı virgüller muhtemelen estetik için orada yer almaktadır. Noktalı virgül gereksizdir ancak bildiğimiz gibi derleyici bu tür noktalı virgüllerden şikayet etmez. Örneğin

public enum MyEnum
{
    a,
    b,
    c
};

Bu da olabilir

public enum MyEnum
{
    a,
    b,
    c
}

6
2018-01-29 15:42



Sınıf / enum sonunda çoklu noktalı virgüller derleme zamanı hatasıyla sonuçlanır, sadece bir taneye izin verilir ve yoksayılır. - Habib
doğru, bunu işaret ettiğin için teşekkürler - Georgi-it