генерик проверить переменную и вернуть
От: belkobot  
Дата: 09.01.10 21:28
Оценка:
Здравствуйте, не подскажете почему не компилится такой код:



 class Generics<Type1> 
    {
        public Type1 mVar1;
       

   

        public int Get()
        {
            if (mVar1 is int)
            {
                return mVar1; //     Cannot implicitly convert type 'Type1' to 'int'....

            }
           
        }

}



почему так происходит, ведь я проверил является ли переменная mVar1 int!
как тогда правильно написать код?

СУВ.
Re: генерик проверить переменную и вернуть
От: samius Япония http://sams-tricks.blogspot.com
Дата: 09.01.10 21:33
Оценка:
Здравствуйте, belkobot, Вы писали:

B>Здравствуйте, не подскажете почему не компилится такой код:


B>почему так происходит, ведь я проверил является ли переменная mVar1 int!

но компилятор-то не знает о том что Type1 это int.

B>как тогда правильно написать код?

return (int)(object)mVar1;
Re: генерик проверить переменную и вернуть
От: _FRED_ Черногория
Дата: 09.01.10 21:37
Оценка:
Здравствуйте, belkobot, Вы писали:

B>почему так происходит, ведь я проверил является ли переменная mVar1 int!

B>как тогда правильно написать код?

В зависимости от вкуса как-то так:
B>return (int)(object)mVar1;

Почему: неявного преобразования из Type1 в int нету, но есть неявное из Type1 в object и явное из object в int. Поэтому надо чётко сказать компилятору, что мы хотим. Компилятор "не помнит" (вернее, не знает) что где-то что-то мы там раньше проверяли.

Есть и такой вариант (здесь неявное преобразования из Type1 в object-параметр метода ToInt32):
B>return Convert.ToInt32(mVar1);

Нету преобразований типов, но, ИМХО, первый вариант более чётко говорит о намерениях програмиста и я бы выбрал два приведения типа.
Help will always be given at Hogwarts to those who ask for it.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.