Общие: приведение типов и типы значений, почему это недопустимо?

Почему это ошибка времени компиляции?

public TCastTo CastMe<TSource, TCastTo>(TSource i)
{
     return (TCastTo)i;
}

Ошибка:

аннотация конвертирует тип TSource в TCastTo '

И почему это ошибка времени выполнения?

public TCastTo CastMe<TSource, TCastTo>(TSource i)
{
     return (TCastTo)(object)i;
}

int a = 4;
long b = CastMe<int, long>(a); // InvalidCastException

// this contrived example works
int aa = 4;
int bb = CastMe<int, int>(aa);

// this also works, the problem is limited to value types
string s = "foo";
object o = CastMe<string, object>(s);

Я искал ответ на этот вопрос в SO и в Интернете и нашел множество объяснений схожих общих проблем с кастингом, но я не могу найти ничего по этому поводу простой случай.

12
задан abatishchev 28 October 2011 в 15:01
поделиться