Здравствуйте, не подскажете почему не компилится такой код:
class Generics<Type1>
{
public Type1 mVar1;
public int Get()
{
if (mVar1 is int)
{
return mVar1; // Cannot implicitly convert type 'Type1' to 'int'....
}
}
}
почему так происходит, ведь я проверил является ли переменная mVar1 int!
как тогда правильно написать код?
СУВ.
Здравствуйте, belkobot, Вы писали:
B>Здравствуйте, не подскажете почему не компилится такой код:
B>почему так происходит, ведь я проверил является ли переменная mVar1 int!
но компилятор-то не знает о том что Type1 это int.
B>как тогда правильно написать код?
return (int)(object)mVar1;
Здравствуйте, belkobot, Вы писали:
B>почему так происходит, ведь я проверил является ли переменная mVar1 int!
B>как тогда правильно написать код?
В зависимости от вкуса как-то так:
B>return (int)(object)mVar1;
Почему: неявного преобразования из Type1 в int нету, но есть неявное из Type1 в object и явное из object в int. Поэтому надо чётко сказать компилятору, что мы хотим. Компилятор "не помнит" (вернее, не знает) что где-то что-то мы там раньше проверяли.
Есть и такой вариант (здесь неявное преобразования из Type1 в object-параметр метода
ToInt32):
B>return Convert.ToInt32(mVar1);
Нету преобразований типов, но, ИМХО, первый вариант более чётко говорит о намерениях програмиста и я бы выбрал два приведения типа.