为什么这个程序输出Generic Value
而不是Hello world!
:
using System;
class Example
{
public static void Print<T>(T value)
{
Console.WriteLine("Generic Value");
}
public static void Print(string value)
{
Console.WriteLine(value);
}
public static void GenericFunc<T>(T value)
{
Print(value);
}
static void Main()
{
GenericFunc("Hello world!");
}
}
如何在 C# 中转换泛型方法参数?
最佳答案
重载解析仅在编译时完成。
自 GenericFunc<T>
不知道是否T
是 string
或者在编译时的其他东西,它只能使用 Print<T>(T value)
“过载”。
使用 dynamic
,您可以将其更改为动态调度,并获得您期望的行为:
Print((dynamic)value);
这使得重载解析发生在运行时,实际运行时类型为 value
.
关于c# - 在重载方法上使用泛型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35340138/