我有一个实现IEnumerable
接口的类的2个实例。我想创建一个新对象并将它们合二为一。我知道我可以使用for..each
来执行此操作。
是否有linq / lambda表达方式这样做?
修改
public class Messages : IEnumerable, IEnumerable<Message>
{
private List<Message> message = new List<Message>();
//Other methods
}
要合并的代码
MessagesCombined messagesCombined = new MessagesCombined();
MessagesFirst messagesFirst = GetMessageFirst();
MessagesSecond messagesSecond = GetMessageSecond();
messagesCombined = (Messages)messagesFirst.Concat(messagesSecond); //Throws runtime exception
//例外是
Unable to cast object of type '<ConcatIterator>d__71`1[Blah.Message]' to type 'Blah.Messages'.
答案 0 :(得分:3)
我遇到了一个字节数组的问题。我做了什么来解决我的问题:
col1.Concat(col2).ToArray();
如果你有一个清单:
col1.Concat(col2).ToList();
答案 1 :(得分:2)
答案 2 :(得分:1)
您需要使用Concat。
Pet[] cats = GetCats();
Pet[] dogs = GetDogs();
IEnumerable<Pet> query = cats.Concat(dogs);
根据你的编辑:
IEnumerable<Message> messagesCombined;
MessagesFirst messagesFirst = GetMessageFirst();
MessagesSecond messagesSecond = GetMessageSecond();
// if this doesn't work, you can cast both MessagesFirst and MessagesSecond to IEnumerable<Message>
messagesCombined = messagesFirst.Concat(messagesSecond);
答案 3 :(得分:1)
Enumarable.Concat
方法返回IEnumerable<Message>
(或实际上是<ConcatIterator>d__71<Message>
,如异常消息所示)。您无法将其转换为Messages
类型。您可以执行以下操作:
var m = new Messages(messagesFirst.Concat(messagesSecond));
并确保您的Messages
类型的构造函数采用IEnumerable<Message>
:
public class Messages : IEnumerable, IEnumerable<Message>
{
private List<Message> message;
public Message(IEnumerable<Message> messages)
{
this.message = new List<Message>(messages);
}
//Other methods
}