我同时传入IEnumerable<string>
和ICollection<string>
作为方法的参数。在方法中,我想将一些值连接到ICollection<string>
并将concat调用的返回值重新分配回传入的ICollection<string>
。我的问题是,最有效的方法是什么?
无法将源类型
'System.Collections.Generic.IEnumerable<string>'
转换为目标类型'System.Collections.Generic.ICollection<string>'
。
void DoSomething(IEnumerable<string> values, ICollection<string> otherValues)
{
// Ideally, I could chain after the Concat and get my ICollection<string>.
otherValues = otherValues.Concat(GetConcatValues());
// Remaining source left out for brevity...
}
我完全理解转换的问题,ICollection<string>
继承IEnumerable<string>
。另外,我知道.Concat调用会返回IEnumerable<string>
而不是所需的ICollection<string>
。
我只是想知道是否存在一个已存在的单行扩展方法,它会故意将其转换为我想要的集合?另外,我刚才意识到我说IEnumerable<string>
和ICollection<string>
就像一百万次......
答案 0 :(得分:4)
由于您必须转换为实现ICollection
界面的其中一个类,因此在您的ToList
上调用IEnumerable<string>
即可:
otherValues = otherValues.Concat(GetConcatValues()).ToList();
注意:分配给otherValues
对调用者没有影响,因为它不是通过引用或out
参数传递的。假设您将可修改的集合传递给方法,您可以使用来自Concat
的数据填充它:
foreach(var s in GetConcatValues()) {
otherValues.Add(s);
}