C# 使用LINQ创建一个列表

C# 使用LINQ创建一个列表,c#,linq,C#,Linq,我有一个名为message的类,里面有一个名为copies的IEnumerable 我需要创建一个新的Recipient类对象,其中包含内容的副本 为了做到这一点,我创建了一个Recipient列表,然后使用ForEach方法在copies上进行交互;但是我用了太多的代码行,感觉不太好。有一种方法可以使用LINQ方法来实现这一点吗 我将在下面讲述我迄今为止所做的事情 使用FOREACH编码(正常工作) var recipientListWithForEach=new List(); foreac

我有一个名为
message
的类,里面有一个名为
copies
IEnumerable

我需要创建一个新的
Recipient
类对象,其中包含
内容的副本

为了做到这一点,我创建了一个
Recipient
列表,然后使用
ForEach
方法在
copies
上进行交互;但是我用了太多的代码行,感觉不太好。有一种方法可以使用
LINQ
方法来实现这一点吗

我将在下面讲述我迄今为止所做的事情

使用FOREACH编码(正常工作)

var recipientListWithForEach=new List();
foreach(message.Copies中的var项)
{
recipientListWithForEach.Add(新收件人)
{
EmailAddress=新的EmailAddress
{
地址=项目
}
});
}
使用LINQ编码(不工作,IDK为什么)

var recipientListWithLINQ=新列表{
message.Copies.Select(项=>新收件人){
EmailAddress=新的EmailAddress{
地址=项目
}
});
};

给出错误消息:
无法从“System.Collections.Generic.IEnumerable”转换为“Microsoft.Graph.Recipient”
每个注释更新:因为您需要单个项目,所以实际上不需要IEnumerable。只需从
副本
中选择第一项,然后构建您的
收件人
。也许为变量选择一个更好的名称

var item = message.Copies.First();
var recipientListWithLINQ = new Recipient {
    EmailAddress = new EmailAddress {
        Address = item
    }
};
原始答复:

您需要使用ToList()将IEnumerable转换为List


你做的工作有点太多了
。选择
返回所需的列表。不需要在
收件人
构造函数中包装该列表

var recipientListWithLINQ =
    message.Copies.Select(item => new Recipient {
        EmailAddress = new EmailAddress {
            Address = item
        }
    });

实际上,问题是您并没有为列表使用正确的构造函数

//正在工作
新列表(项目)
下面是列表初始化语法,它接受的不是IEnumerable,而是由coma分隔的单个项

//坏的
新列表{items}
//工作
新列表{item1,item2}
所以,只需更正您的代码

var recipientListWithLINQ=新列表(
message.Copies.Select(项=>新收件人){
EmailAddress=新的EmailAddress{
地址=项目
}
));
};
但是LINQ查询应该更简单

var recipientListWithLINQ=
message.Copies.Select(项=>新收件人){
EmailAddress=新的EmailAddress{
地址=项目
}
)
.ToList();

什么是“不起作用”是什么意思?我们看不到您的错误…编辑添加错误消息无效。我需要将普通收件人发送到此处。而不是列表ones@HudsonMedeiros请查收update@HudsonMedeiros这个注释有点令人困惑,因为在这个问题中,您有一个示例代码,它创建了一个收件人列表,标题为“(正常工作)”,这个答案中的原始代码做了同样的事情,除了使用linq,这就是问题的目的。@RufusL更令人困惑的是,OP和我的答案是如何工作的-不是..是的,它们是相同的,除了你包含的
.ToList()
,这是他们要求的。它完全符合我的需要。谢谢@catfood的解释。你救了我一天!注意,如果你想要一个列表,你需要在末尾添加
.ToList()
var item = message.Copies.First();
var recipientListWithLINQ = new Recipient {
    EmailAddress = new EmailAddress {
        Address = item
    }
};
var recipientListWithLINQ = message.Copies.Select(item => new Recipient {
    EmailAddress = new EmailAddress {
        Address = item
    }
}).ToList();
var recipientListWithLINQ =
    message.Copies.Select(item => new Recipient {
        EmailAddress = new EmailAddress {
            Address = item
        }
    });