Pertanyaan C # int, Int32 dan enums


Jika int identik dengan Int32 Kenapa

enum MyEnum : Int32
{
    Value = 1
}

... tidak dikompilasi? Di mana as

enum MyEnum : int
{
    Value = 1
}

akan, meskipun melayang kursor di atas kata int akan menampilkan struct System.Int32?


32
2017-11-28 18:58


asal


Jawaban:


Tipe yang mendasari memang sama, tetapi compiler tergantung pada jenis yang akan menjadi alias yang sama persis. Ini adalah kesalahan kompilasi berdasarkan parsing. Saya melihat spesifikasi C # grammar dan jenis yang mendasari yang didefinisikan sebagai token berdasarkan alias (misalnya 'int', 'unit' ... dll.). Parser mengharapkan string tertentu dari tipe integral aturan tata bahasa.

Kesalahan adalah kesalahan penguraian meskipun keduanya enum Enum : int berarti sama dengan enum Enum : Int32.

Saya tidak tahu alasan untuk memaksa batas ini untuk menguraikan langkah, tetapi saya dapat mencoba menebak: Karena Int32 bukan kata kunci, itu mungkin merujuk pada sesuatu yang lain dari struct int yang sebenarnya. Jika parser harus tahu jenisnya agar bisa dibangun berbeda AST untuk setiap tipe dasar maka tidak dapat bergantung pada token yang bukan kata kunci.

Meskipun spesifikasi C # mendefinisikan int kata kunci sebagai alias eksplisit System.Int32, masih masalah untuk mendapatkan informasi ini tentang jenis eksplisit (Int32) selama langkah parsing karena membutuhkan banyak informasi konteks yang tidak dapat disimpulkan pada langkah ini.


30
2017-11-28 19:06



Keingintahuan yang akrab ... negara spec bahasa (14.1):

Deklarasi enum dapat secara eksplisit mendeklarasikan tipe byte yang mendasari, sbyte, short, ushort, int, uint, long atau ulong. Perhatikan bahwa char tidak dapat digunakan sebagai tipe yang mendasarinya. Deklarasi enum yang tidak secara eksplisit mendeklarasikan tipe yang mendasari memiliki tipe int yang mendasarinya.

Tapi sejak itu int aku s umumnya hanya sebuah alias untuk System.Int32 tidak keterlaluan berpikir mungkin bisa berhasil ... tapi memang tidak. Ini bukan masalah besar, tetapi tidak menarik sama sekali.


14
2017-11-28 19:14