2015-04-04 63 views
0

我有一个变量var1,它是一个包含单个字符串列表的自定义类。我有另一个变量var2这是一个类似列表var1避免在C#中进行深度复制的解决方案

什么,我的目标是什么是我需要遍历var2,按类类和实例AddRange串的var1s名单与var2i个类的自己的字符串列表结合起来。这是独立完成的,这意味着var1的字符串列表在每次迭代中保持不变。只有在每次迭代时,其字符串列表才会与var2的字符串列表相结合,但是在迭代之后,它必须恢复为原始字符串。问题是我不能让这个工作。每次我添加一个字符串,它都不会恢复。

我试过做一个深层复制,并在每次迭代结束时将中间克隆类设置为null。有任何想法吗?

下面是一个粗略的 “PeudoCode”

public void combineString(CustomClass var1) 
{ 
    // var2 is a class variable that contains a list of CustomClass 

    List<CustomClass> finalized = new List<CustomClass>(); 

    for (int i = 0; i < var2.Count; i++) 
    { 

      CustomClass tmpVar = (CustomClass)var1.Clone(); 
      tmpVar.addString(var2[i].StringSet); //each Custom class has a stringSet which is a list of strings 


      // .....Do some analysis of the strings of tmpVar 
      // if it passes the analysis add tmpVar in to finalize list 
      // none of the other components should change 

      if (pass analysis) 
      { 
       finalized.Add(tmpVar); 

      } 
      tmpVar = null; 

    } 

    // When the loop is done, the 'finalized' variable is a list of 
    // CustomClass but then each element inside finalized contains the same string set. 


    Console.WriteLine("Done"); 

} 
+0

发布您的代码? – 2015-04-04 15:54:29

+0

是的,我正在努力!抱歉! – user1234440 2015-04-04 15:56:47

+0

听起来我可以使用*函数式编程来做到这一点。 – 2015-04-04 16:05:09

回答

0

所以,var1必须保持不变。要么将这些字符串合并到另一个var1中,要么必须将该字符串保留原样,请一起使用新的列表。我看不到需要克隆。

+0

'var1'本身就是一个类,我需要它的组件保持完整无损。 – user1234440 2015-04-04 16:05:59

0

所以,你基本上必须在单个字符串中连接两个字符串列表,而不必接触字符串本身。

会这样吗?

string concatenated = var1.Concat(var2[i].StringSet).Aggregate((item1, item2) => item1 + item2);

Aggregate在一个IEnumerable迭代,并返回其所有项目的连接。