Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Почему Option Strict не ругается на разные Enum / 12 сообщений из 12, страница 1 из 1
16.06.2014, 17:32
    #38670769
Alexander_fx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему Option Strict не ругается на разные Enum
Привет
Как заставить компилятор выдавать ошибку в том случае если используется тип описанный одним enum а сравнивается другой
Что то типа

enum one
a=0
b=1
c=2
end enum

enum two
d=0
e=1
f=2
end enum

dim test as one
if one=two.d Вот тут хочу чтобы компилятор ругался
...
Рейтинг: 0 / 0
17.06.2014, 03:04
    #38671133
bazile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему Option Strict не ругается на разные Enum
Alexander_fx, крайне странное поведение. Спецификация утверждает, что при Option Strict On разрешены только неявные widening преобразования типов, а преобразование из одного enum в другой является narrowing преобразованием:
The set of implicit conversions depends on the compilation environment and the Option Strict statement. If strict semantics are being used, only widening conversions may occur implicitly. If permissive semantics are being used, all widening and narrowing conversions (in other words, all conversions) may occur implicitly.
Narrowing Conversions
....
From a numeric type to an enumerated type.
From an enumerated type to a numeric type its underlying numeric type has a narrowing conversion to.
From an enumerated type to another enumerated type.
Лично мне тоже интересно понять почему компилятор себя так ведет. Кстати dotPeek показал просто сравнение переменных. Надо еще на уровне IL кода посмотреть.
...
Рейтинг: 0 / 0
17.06.2014, 12:36
    #38671589
D129
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему Option Strict не ругается на разные Enum
bazileЛично мне тоже интересно понять почему компилятор себя так ведет. Кстати dotPeek показал просто сравнение переменных. Надо еще на уровне IL кода посмотреть.
В бейсике же есть автоматическое приведение типов. Может это оно срабатывает?
...
Рейтинг: 0 / 0
17.06.2014, 12:44
    #38671605
D129
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему Option Strict не ругается на разные Enum
Alexander_fx
Код: vbnet
1.
2.
dim test as one
if one=two.d      



А почему у вас "test" - нигде не используется? В примере?
...
Рейтинг: 0 / 0
17.06.2014, 12:47
    #38671617
D129
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему Option Strict не ругается на разные Enum
Alexander_fx,

До меня дошло.
в проверке условия (оно, кстати, никогда не будет истинным) вы проверяете, равен ли тип One типу Integer.

:-)

В шарпе очень даже ругается компилятор.
...
Рейтинг: 0 / 0
17.06.2014, 13:08
    #38671656
Alexander_fx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему Option Strict не ругается на разные Enum
D129,
вот код
сообщение выскакивает и компилятор не ругается
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Option Strict On
Option Explicit On
Module Module1
    Public Enum one
        a = 0
        b = 1
        c = 2
    End Enum
    Public Enum two
        aa = 0
        bb = 1
        cc = 2
    End Enum
    Sub Main()
        Dim test As one
        If test = two.aa Then
            MsgBox("test=two.aa")
        End If
    End Sub
End Module
...
Рейтинг: 0 / 0
17.06.2014, 13:52
    #38671756
D129
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему Option Strict не ругается на разные Enum
Alexander_fx,

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
One test;

			test = One.b;
			if(test == Two.e)
			{ 
			
			
			}



А в шарпе - ругается.
Пишите на том, что вам в данный момент нужно.
:-)

Бейсик очень вольно обращается с типами. Взял и преобразовал - и не сказал.
Попробуйте перевернуть условие - ради эксперимента....
...
Рейтинг: 0 / 0
17.06.2014, 13:57
    #38671765
D129
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему Option Strict не ругается на разные Enum
Alexander_fx,

Вообще-то, сторого говоря, сравнивать значения разных перечислений - это только шутки ради можно...
...
Рейтинг: 0 / 0
17.06.2014, 14:00
    #38671771
D129
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему Option Strict не ругается на разные Enum
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
enum Material
		{
			soft, middle, hard
		}

		enum Color
		{
			red, blue, green, gray
		}

		void Joke()
		{
			if(Material.soft == Color.green)
			{ 
			
			//:-)
			}
		
		}
...
Рейтинг: 0 / 0
17.06.2014, 14:16
    #38671795
Alexander_fx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему Option Strict не ругается на разные Enum
D129
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
enum Material
		{
			soft, middle, hard
		}

		enum Color
		{
			red, blue, green, gray
		}

		void Joke()
		{
			if(Material.soft == Color.green)
			{ 
			
			//:-)
			}
		
		}



так я понимаю в шарпе тут ругается
вот я и думаю какая настройка среды отвечает за это
...
Рейтинг: 0 / 0
17.06.2014, 14:21
    #38671804
D129
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему Option Strict не ругается на разные Enum
Alexander_fxтак я понимаю в шарпе тут ругается
вот я и думаю какая настройка среды отвечает за это
Синтаксический сахар бейсика.
Сомневаюсь, что это можно настроить.
...
Рейтинг: 0 / 0
17.06.2014, 19:02
    #38672269
bazile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему Option Strict не ругается на разные Enum
D129В бейсике же есть автоматическое приведение типов. Может это оно срабатывает?
Неявное приведение типов не должно работать в данном случае т.к. Option Strict включена.

D129Вообще-то, сторого говоря, сравнивать значения разных перечислений - это только шутки ради можно...
Разумеется, но если бы я случайно написал такое сравнение, то ожидал бы ошибку компиляции. В данном случае её не будет, а будет, похоже, сравнение значений.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Почему Option Strict не ругается на разные Enum / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]