Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C从属性列表创建对象列表_C#_Linq - Fatal编程技术网

C# C从属性列表创建对象列表

C# C从属性列表创建对象列表,c#,linq,C#,Linq,我正试图将此最小化 List<ClassB> foo(List<ClassA> listA) { var listB = new List<ClassB>(); foreach (var item in listA) listB.Add(new ClassB(item, "stuff")); return listB; } 有没有什么方法可以使用LINQ最小化这个问题?我想尽量减少这种情况,因为在我的代码库中有大量这

我正试图将此最小化

List<ClassB> foo(List<ClassA> listA)
{
    var listB = new List<ClassB>();
    foreach (var item in listA)
        listB.Add(new ClassB(item, "stuff"));

    return listB;
}

有没有什么方法可以使用LINQ最小化这个问题?我想尽量减少这种情况,因为在我的代码库中有大量这样的转换,而泛型无法处理要转换的各种类的怪癖。

您可以在select语句中执行许多操作,包括从您拥有的对象构建新对象:

List<ClassB> foo(List<ClassA> listA)
{
    return lisA.Select(row => new ClassB(row, "stuff").ToList();
}
选择方法是您所需要的。它基本上是将枚举中的每个元素转换为其他元素。在本例中,您正在将所有ClassA转换为ClassB

Select的参数是一个方法,它获取ClassA的实例并返回ClassB。在本例中,该方法如下所示:

ClassB MyMethod(ClassA obj) {
    return new ClassB(obj, "stuff");
}
这可以写成lambda表达式形式:

obj => new ClassB(obj, "stuff")
你把这个传递给Select,调用ToList将IEnumerable转换成一个列表,就完成了

List<ClassB> foo(List<ClassA> listA)
{
    return listA.Select(obj => new ClassB(obj, "stuff")).ToList();
}
您可以使用将listA的元素投影到ClassB Intance中:

listA.Select(a => new ClassB(a, "stuff")).ToList()

是的,有。你试过林肯吗?选择“请显示您已尝试的内容”。如果每门课都有怪癖,那么我们可以从中得到帮助。不,没有解决非一般问题的通用解决方案。对于问题中的特定代码,您可以只执行listA.Selectitem=>new ClassBitem,stuff.ToList,但是如果另一个类的构造在每种情况下都不同,那么1个普通简单的一行代码将不起作用。如果我错了,请纠正我,但是使用Select,我可以从原始列表中选择一些或全部。但是我如何将它们转换为类B的列表?@LasseV.Karlsen当前代码与类的外观无关,因为我们怀疑当前代码可以转换为linq@Crimson7-选择用于投影。你想的是在哪里。参考MSDI我想他指的是列表a.Select。谢谢你的解释。几分钟后我会把它标为答案。