Decompiler изменен простой MessageBox
код:MessageBox типа отливка INT
MessageBox.Show("msg");
Для этого:
int num = (int) MessageBox.Show("msg");
Оба отлично работает. Что означает этот тип каста?
Decompiler изменен простой MessageBox
код:MessageBox типа отливка INT
MessageBox.Show("msg");
Для этого:
int num = (int) MessageBox.Show("msg");
Оба отлично работает. Что означает этот тип каста?
От C# спецификации языка:
6.2.2 Явного перечислительные преобразования
Явные преобразования перечисления:
· Из sbyte, byte, short, ushort, int, uint, long, ulong, char, float, double или decimal для любого типа enum.
· Из любого типа перечисления в sbyte, byte, short, ushort, int, uint, long, ulong, char, float, double или decimal.
· От любого типа перечисления до любого другого перечисляемого типа.
В частности, ваш образец содержит явное преобразование от DialogResult
до int
. Но другие типы из приведенного выше списка также допускаются, независимо от типа перечисления.
MessageBox.Show()
возвращает DialogResult
значения, которое enum
типа так что отливка возвращает вам базовый тип элементов перечисления (по умолчанию int
) отданных в int
«Это литье возвращает базовый тип элементов перечисления» - неправильно. Это кастинг возвращает 'int', потому что есть листинг для' int', а не потому, что основной тип перечисления - 'int'. Например, это тоже будет правильно: 'long num = (long) MessageBox.Show (" msg ")'. – Dennis
Да, я понимаю, что плохой выбор слов. Спасибо за исправление. –
Показать (..) возвращает DialogResult и перечисление, а для этого - целое число –