【问题标题】:Dictionary Content copy from one model to another model字典内容从一个模型复制到另一个模型
【发布时间】:2017-03-06 10:09:05
【问题描述】:

我有以下字典。

firstDict=Dictionary<string,X>

SecondDict=Dictionary<string,y>

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

如何将firstDict 的内容复制到secondDict

有没有直接的方法?

【问题讨论】:

  • 这取决于。 X 是否可以隐式或显式转换为 Y? (即(Y)xObj 可以工作吗?)如果可以,那么您可以复制数组
  • X 和 Y 类包含相同的属性。我的意思是 Y 类是 X 类的精确副本。
  • 但是如果它们彼此不相关,即派生以便编译器可以使用类层次结构,则只有在它们是动态的情况下才能工作

标签: c# asp.net dictionary


【解决方案1】:

您需要手动初始化属性(或使用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 实例并封装它。

【讨论】:

  • 这不是 C#,尽管您的答案是正确的。如果这些类相互关联或者它们是动态的,则不需要这样做。
  • @Psi:以为是 VB.NET(可能是因为伪代码)。固定
【解决方案2】:

我已经完成了以下.. 它似乎工作。 MyClassOne 在我的 UI 中,而 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});
    }

希望这就是你所追求的......

【讨论】:

    【解决方案3】:

    您可以使用Linq 来执行此操作

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

    【讨论】:

      猜你喜欢
      • 2011-08-11
      • 1970-01-01
      • 2018-07-10
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多