我有一个返回Tuple的方法,它包含两个词典
Tuple<Dictionary<string, ICustomProperty>, Dictionary<string, ICustomProperty>> GetDictionaries();
所以我为这种类型创建了两个类。
public class PropertyDictionary : Dictionary<string, ICustomProperty>{}
和
public class PropertyDictionaryTuple : Tuple<PropertyDictionary, PropertyDictionary>
{
public PropertyDictionaryTuple(PropertyDictionary fromFluxData, PropertyDictionary localData)
: base(fromFluxData, localData)
{
}
}
但是当我尝试做这样的事情时:
PropertyDictionaryTuple data = GetDictionaries();
我有错误:
无法隐式转换类型'System.Tuple,Syst em.Collections.Generic.Dictionary&gt;'到'PropertyDictionaryTuple'
如何解决这个问题?
答案 0 :(得分:1)
PropertyDictionaryTuple
来自Tuple<PropertyDictionary, PropertyDictionary>
的事实并不意味着每Tuple<PropertyDictionary, PropertyDictionary>
都是PropertyDictionaryTuple
。
PropertyDictionaryTuple
不是特定Tuple<PropertyDictionary, PropertyDictionary>
的别名 - 它是一种全新类型,可以有自己的字段和方法等。
通常,继承允许您降低类型的泛化 - 例如,您可以将string
的值分配给object
的变量。如果可以将任何object
投射到string
,那么它实际上可以反过来工作......那么它将如何运作?
如果要将较不具体的类型转换为更具体的类型,则需要自己实现转换。例如,
var dictionaries = GetDictionaries();
var pdt =
new PropertyDictionaryTuple
(
new PropertyDictionary(dictionaries.Item1),
new PropertyDictionary(dictionaries.Item2)
);
(您还需要实现创建原始字典副本的PropertyDictionary
构造函数)
这当然会创建一个 new PropertyDictionaryTuple
,里面有两个 new 词典。
或者只需更改GetDictionaries
方法即可直接返回(并创建)PropertyDictionaryTuple
。
修改强>
PropertyDictionary
定义可能如下所示:
public class PropertyDictionary : Dictionary<string, ICustomProperty>
{
public PropertyDictionary(Dictionary<string, ICustomProperty> dict)
: base(dict)
{}
}