powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Почему Option Strict не ругается на разные Enum
12 сообщений из 12, страница 1 из 1
Почему Option Strict не ругается на разные Enum
    #38670769
Alexander_fx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет
Как заставить компилятор выдавать ошибку в том случае если используется тип описанный одним 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
Почему Option Strict не ругается на разные Enum
    #38671133
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Почему Option Strict не ругается на разные Enum
    #38671589
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazileЛично мне тоже интересно понять почему компилятор себя так ведет. Кстати dotPeek показал просто сравнение переменных. Надо еще на уровне IL кода посмотреть.
В бейсике же есть автоматическое приведение типов. Может это оно срабатывает?
...
Рейтинг: 0 / 0
Почему Option Strict не ругается на разные Enum
    #38671605
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander_fx
Код: vbnet
1.
2.
dim test as one
if one=two.d      



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

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

:-)

В шарпе очень даже ругается компилятор.
...
Рейтинг: 0 / 0
Почему Option Strict не ругается на разные Enum
    #38671656
Alexander_fx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Почему Option Strict не ругается на разные Enum
    #38671756
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander_fx,

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

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



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

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

Вообще-то, сторого говоря, сравнивать значения разных перечислений - это только шутки ради можно...
...
Рейтинг: 0 / 0
Почему Option Strict не ругается на разные Enum
    #38671771
Фотография 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
Почему Option Strict не ругается на разные Enum
    #38671795
Alexander_fx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Почему Option Strict не ругается на разные Enum
    #38671804
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander_fxтак я понимаю в шарпе тут ругается
вот я и думаю какая настройка среды отвечает за это
Синтаксический сахар бейсика.
Сомневаюсь, что это можно настроить.
...
Рейтинг: 0 / 0
Почему Option Strict не ругается на разные Enum
    #38672269
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D129В бейсике же есть автоматическое приведение типов. Может это оно срабатывает?
Неявное приведение типов не должно работать в данном случае т.к. Option Strict включена.

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


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