相关疑难解决方法(0)

在C#中联合多个列表

我正在为以下情况寻找一个优雅的解决方案:

我有一个包含List的类

class MyClass{ 
...
 public List<SomeOtherClass> SomeOtherClassList {get; set;}
...
}
Run Code Online (Sandbox Code Playgroud)

第三类叫做Model持有List<Myclass>一个我从外部操作的那个.

现在我想用一个方法扩展Model类,该方法返回所有MyClass实例上的所有唯一SomeOtherClass实例.

我知道有Union()方法和foreach循环我可以很容易地解决这个问题,我实际上做了.但是,由于我是所有C#3 +功能的新手,我很好奇如何在有或没有Linq的情况下更优雅地实现这一点.

我找到了一种方法,对我来说似乎相当笨拙,但它有效:

        List<SomeOtherClass> ret = new List<SomeOtherClass>();
        MyClassList.Select(b => b.SomeOtherClasses).ToList().ForEach(l => ret = ret.Union(l).ToList()); 
        return ret;
Run Code Online (Sandbox Code Playgroud)

注意:该b.SomeotherClasses属性返回一个List<SomeOtherClasses>.

这段代码远非完美,而且有些问题来自于我必须弄清楚什么是使用C#3的好风格,什么不是.所以,我提出了一个关于该片段的小清单,我很乐意得到一些评论.除此之外,我很高兴听到一些评论如何进一步改进此代码.

  • 临时列表ret可能是C#2中的一种方法的一部分,但是我应该能够使用方法链来重新签名这个列表是否正确?或者我错过了这一点?
  • 是否真的需要使用中间ToList()方法?我想要的只是对选择中的每个成员执行进一步操作.
  • 那些ToList()操作的成本是多少?他们风格好吗?必要?

谢谢.

c# linq extension-methods list

13
推荐指数
1
解决办法
9625
查看次数

如何合并两个列表并删除重复项

鉴于我有两个列表,如下所示:

var listA = new List<string> { "test1", "test2", "test3" };
var listB = new List<string> { "test2", "test3", "test4" };
Run Code Online (Sandbox Code Playgroud)

我想要第三个列表:

var listC = new List<string> { "test1", "test2", "test3", "test4"}
Run Code Online (Sandbox Code Playgroud)

有没有办法得到这个?

c# linq join list

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

c# ×2

linq ×2

list ×2

extension-methods ×1

join ×1