class CustomClass<T> where T: bool
{
public CustomClass(T defaultValue)
{
init(defaultValue); // why can't the compiler just use void init(bool) here?
}
public void init(bool defaultValue)
{
}
// public void init(int defaultValue) will be implemented later
}
您好。这似乎是一个简单的问题,但我在互联网上找不到答案:为什么编译器不会使用 init 方法?我只是想为不同类型提供不同的方法。
而是打印以下错误消息: “'CustomClass.init(bool)'的最佳重载方法匹配有一些无效的参数”
我很乐意提示。
祝你好运, 克里斯
答案 0 :(得分:34)
编译器无法使用init(bool)
,因为在编译时它无法知道T
是bool
。您要求的是动态调度 - 实际调用哪个方法取决于参数的运行时类型,并且无法在编译时确定。
您可以使用dynamic
类型:
class CustomClass<T>
{
public CustomClass(T defaultValue)
{
init((dynamic)defaultValue);
}
private void init(bool defaultValue) { Console.WriteLine("bool"); }
private void init(int defaultValue) { Console.WriteLine("int"); }
private void init(object defaultValue) {
Console.WriteLine("fallback for all other types that don’t have "+
"a more specific init()");
}
}