编程语言
首页 > 编程语言> > 通用类型推断如何在C#中工作?

通用类型推断如何在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