我有一个带有以下重载的方法:
string Call(string function, Dictionary<string, object> parameters, object body)
string Call(string function, Dictionary<string, object> parameters, JObject body)
现在我添加了另一个重载:
string Call(string function)
{
return Call(function, null, (JObject) null);
}
我向JObject
添加了一个强制转换,因此编译器知道它应该使用哪个重载。但Visual Studio告诉我演员阵容是多余的。但是如果没有演员,为什么我的电话不明确?
答案 0 :(得分:97)
但是如果没有演员,为什么我的电话不明确?
因为JObject
参数的重载比使用object
参数的重载“更好”...因为从null
到JObject
的转换“更好“而不是从null
转换为object
。
JObject
比object
更具体,因为从JObject
到object
的隐式转换,但反之亦然。
如果第一种方法的最后一个参数是string
而不是(例如),那么任何一次重载都不会比另一种好,并且如果没有强制转换,调用 将是不明确的。< / p>
有关所有复杂细节,请参阅C#5规范的7.5.3节。特别是,第7.5.3.5节(“更好的转换目标”)与此相关。