调用在 IDictionary<string、object> 和 IDictionary 之间不明确



我正在使用一个带有以下构造函数的类的库:

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() }
});

这个设计看起来确实有点可疑,然而。。。

最新更新