Учитывая:
internal abstract class Animal { }
internal class Dog : Animal { }
Я пытаюсь написать универсальный метод, который можно использовать для преобразования или для преобразования из одного типа в другой, поэтому:
static TOutput ConvertOrCast<TInput, TOutput>(TInput toConvert)
{
if (toConvert is TOutput) return (TOutput)(dynamic)toConvert;
return (TOutput)Convert.ChangeType(toConvert, typeof(TOutput));
}
В первой строке мне нужно сначала привести к (object)
или (dynamic)
, чтобы избежать ошибки компилятора "Невозможно преобразовать тип 'TInput' в 'TOutput'".
Я понимаю,например, из this , что использование dynamic
обычно включает в себя упаковку / распаковку для типов значений, но происходит ли это в этом случае?Я надеюсь, что компилятор достаточно умен, чтобы признать, что тип ввода уже совпадает с типом вывода, потому что тогда почему бы просто не использовать object
вместо dynamic
?