我正在使用一个带有以下构造函数的类的库:
public JobDataMap(IDictionary<string, object> map);
public JobDataMap(IDictionary map);
我创建了一个JobDataMap:的实例
var jdm = new JobDataMap(new Dictionary<String, Object> {
{ "Manager", myObject }
});
但我得到了编译错误:
The call is ambiguous between the following methods or properties:
'JobDataMap.JobDataMap(IDictionary<string, object>)' and 'JobDataMap.JobDataMap(IDictionary)'
如何解决这个问题?
您可以强制执行传递的类型,如下所示:
var jdm = new JobDataMap((IDictionary<string, object>)new Dictionary<String, Object> {
{ "Manager", myObject }
});
或者,您可以制作一个工厂方法,并制作非泛型构造函数(我假设您使用较少(private
:
public class JobDataMap
{
public JobDataMap(IDictionary<string, object> map)
{
}
private JobDataMap(IDictionary map)
{
}
public static JobDataMap FromNonGenericMap(IDictionary map)
{
return new JobDataMap(map);
}
}
用法:
var jdm = JobDataMap.FromNonGenericMap(someNonGenericDictionary);
然后你可以使用常规的泛型,比如:
var jdm = new JobDataMap(new Dictionary<String, Object> {
{ "Manager", myObject }
});
您可以将它强制转换为您希望它使用的构造函数的类型:
var jdm = new JobDataMap((IDictionary<string, object>) new Dictionary<String, Object> {
{ "Manager", new object() }
});
这个设计看起来确实有点可疑,然而。。。