c# - 将新对象添加到列表不起作用

标签 c#

我正在尝试将一个新的 OldFlatFile 添加到 OldFlatFileList 中,但在添加新文件时不起作用。我看不到错误,我不知道下面的代码是否有问题?

OldFlatFileList 添加前后计数相同:

    var selectedPackage = FlatFileHelper.GetSelectedPackage(OldFlatFileList);
    var primaryFeature = new PrimaryFeatures(){ DataTypeCode = "abc" };

    OldFlatFileList.ToList().Add(
    new OldFlatFile
    {
        new OldFlatFileEntry
        {
            InformationFields = selectedPackage.InformationFields,
            PrimaryFeatures = primaryFeature,
            SecondaryFeatures = null
        }
    });

    private IEnumerable<OldFlatFile> OldFlatFileList
    {
        get { return Session[SystemConstant.OldFlatFileListKey] as List<OldFlatFile>; }
        set { Session[SystemConstant.OldFlatFileListKey] = value; }
    }

    public class OldFlatFile : List<OldFlatFileEntry>
    {}

最佳答案

OldFlatFileList.ToList()创建列表的新实例(它将具有原始列表中项目的副本)。然后您将新对象添加到该新列表,但您不会在任何变量中保存对新列表的引用。因此,您添加了项目的新列表将由垃圾收集器收集。原始列表将保持不变(因为您没有向其中添加项目)。

因此您不能将项目添加到 IEnumerable<T> 的变量中类型(它只支持枚举),我建议你改成OldFlatFileList属性类型为 List<OldFlatFile> , 或 IList<OldFlatFile>ICollection<OldFlatFile> .然后简单地调用:

 OldFlatFileList.Add(new OldFlatFile { ... });

这将修改您的原始列表。

关于c# - 将新对象添加到列表不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20858539/

相关文章:

c# - 在 C# 中克隆对象

c# - 带有响应式扩展的流算法

c# - 从 WMI 运行 exe 时的网络身份验证

c# - 行过滤器中的多个参数

c# - 授权(角色 = "Admin")总是返回拒绝访问

c# - Entity Framework : insert an object with a foreign key which is already known, 但在数据库中尚不存在

c# - 针对慢速分组的 LINQ 查询优化

c# - 在Windows Mobile 6上使用SndPlayAsync功能时控制音量

c# - UrlReferrer 到底是什么意思?

c# - 从 Windows 服务创建交互式提升进程并显示给登录用户