2017-03-06 91 views
0

我有一个以下的字典。字典内容从一个模型复制到另一个模型

firstDict=Dictionary<string,X> 

SecondDict=Dictionary<string,y> 

其中X和Y表示模型类,x和y包含相同的属性,但x和y位于不同的名称空间中。

如何将firstDict内容复制到secondDict

有没有什么直接的办法?

+0

这要看情况。 X是隐式还是明确地转换为Y? (即'(Y)xObj'工作吗?)如果是,那么你可以拷贝数组 – Psi

+0

X和Y类包含相同的属性。我的意思是Y类是X类的确切副本。 –

+0

但是,如果它们彼此不相关,即派生,以便编译器可以使用类层次结构,则只有它们是动态的时才可以工作 – Psi

回答

2

需要初始化手动特性(或使用AutoMapper):

var firstDict = new Dictionary<string, FirstNameSpace.X>(); 
var secondDict = new Dictionary<string, SecondNameSpace.Y>(); 

foreach (var pair in firstDict) { 
    var y = new SecondNameSpace.Y(); 
    y.Prop1 = pair.Value.Prop1; 
    // ... ' 
    secondDict.Add(pair.Key, y); 
} 

另一种选择,不使它简单,但安全是提供一个拷贝构造函数或工厂方法Y这需要一个X实例并封装它。

+0

尽管答案是正确的,但这不是C#。如果这些课程是相互关联的,或者它们是动态的,则不需要这样做。 – Psi

+0

@Psi:认为它是VB.NET(可能是因为伪代码)。固定 –

+0

现在看起来不错:) – Psi

0

我已经做了下面..它似乎工作。 MyClassOne在我的用户界面中,而MyClassTwo则在一个被导入的称为business的独立程序集中。

using Business; 

    var firstDict = new Dictionary<string,MyClassOne> 
    { 
     {"Key1", new MyClassOne() {PropertyOne = "FirstValue1"}} 
    }; 

    var secondDict = new Dictionary<string, MyClassTwo> 
    { 
     {"Key2", new MyClassTwo() {PropertyOne = "SecondValue1"}} 
    }; 

    foreach (var entryToCopy in firstDict) 
    { 
     secondDict.Add("NewStringKey", new MyClassTwo(){PropertyOne = entryToCopy.Value.PropertyOne}); 
    } 

希望这是你以后..

0

您可以使用Linq做到这一点

Dictionary<string, Y> secondDict = firstDict.ToDictionary(pair => pair.Key, pair => new Y {prop1 = pair.Value.prop1, prop2 = pair.Value.prop2, ...}); 
相关问题