通用类型推断如何在C#中工作?
作者:互联网
如果我有以下代码
private BaseMessage getMessage()
{
return new OtherMessage();
}
private void CheckType<T>(T type)
{
Console.WriteLine(type.GetType().ToString());
Console.WriteLine(typeof(T).ToString());
}
private void DoChecks()
{
BaseMessage mess = getMessage();
CheckType(mess);
}
为什么我会输出不同的类型?有没有得到类型推断使用传递的对象的实际类型?
解决方法:
泛型类型推断意味着编译器会自动解析传递的参数类型,而无需您明确指定要传递的类型.这意味着这是在编译时完成的:在代码中,在编译期间,编译器只知道BaseMessage,因此参数将作为BaseMessage传递.在运行时,参数的实际类型将是OtherMessage,但这与编译器无关.
因此,您获得的输出绝对有效.除了总是使用Object.GetType而不是typeof()之外,我不知道有什么办法可以解决这个问题.
标签:c,net,c-3-0,type-inference,generics 来源: https://codeday.me/bug/20190717/1483421.html