我有一个List <>我的对象,但现在需要将其更改为IEnumerable <>.所以,我有这个:
public IEnumerable<TransactionSplitLine> TransactionSplitLines { get; set; }
Run Code Online (Sandbox Code Playgroud)
但是,我不能再做了:
reply.TransactionSplitLines.Add(new TransactionSplitLine
{Amount = "100", Category = "Test", SubCategory = "Test More", CategoryId=int.Parse(c)});
Run Code Online (Sandbox Code Playgroud)
我现在应该如何添加物品?
slo*_*oth 19
您可以使用Concat执行以下操作:
reply.TransactionSplitLines =
reply.TransactionSplitLines.Concat(new []{new TransactionSplitLine {
Amount = "100",
Category = "Test",
SubCategory = "Test More",
CategoryId = int.Parse(c)}});
Run Code Online (Sandbox Code Playgroud)
这基本上创造了一个新的IEnumerable
.由于没有足够的关于您的用例的信息,很难说您的案例中最好的解决方案是什么.
编辑:
请注意List<T>
工具IEnumerable<T>
.因此,如果您需要传递IEnumerable<T>
一个参数作为示例,您也可以传递一个List<T>
代替,也许AsEnumerable()
首先在您的列表上显式调用.所以也许你可以坚持使用List而不是IEnumerable.
简答:您无法添加项目IEnumerable<T>
稍微长一点的解释:
IEnumerable
是一个仅关注能够枚举/迭代项集合的接口.这是存在的唯一目的IEnumerable
.它抽象出了存储或检索可枚举项的方式的任何概念(它可能是一串字符,项列表,字节流或一系列计算结果),因此如果你有一个接口是IEnumerable
,您无法向其添加项目,您只能迭代它提供的项目.
也就是说,添加项目的正确方法IEnumerable
是返回new IEnumerable
,并将新项目附加到原始内容中.
另外,对于Linq库,您有一个扩展方法,允许将IEnumerable转换为List IEnumerable.ToList()
,您可以将项添加到列表中.虽然这不是正确的方式.
使用命名空间中的Linq库,您可以执行以下操作:
using System;
using System.Collections.Generic;
using System.Linq;
namespace EnumTester
{
class Program
{
static void Main(string[] args)
{
IEnumerable<string> enum = GetObjectEnumerable();
IEnumerable<string> concatenated = enum.Concat(new List<string> { "concatenated" });
List<string> stringList = concatenated.ToList();
}
}
}
Run Code Online (Sandbox Code Playgroud)
您无法添加项目,IEnumerable<T>
因为此接口没有Add
方法.
如果TransactionSplitLines
总是返回a的实例,List<TransactionSplitLine>
您可能希望将其类型更改为IList<TransactionSplitLine>
.
如果您无法更改类型,TransactionSplitLines
并且可以保证它始终返回a,IList<TransactionSplitLines>
您可以将其转换为
((IList<TransactionSplitLine>)reply.TransactionSplitLines).Add(new TransactionSplitLine
{Amount = "100", Category = "Test", SubCategory = "Test More", CategoryId=int.Parse(c)});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
47017 次 |
最近记录: |