【问题标题】:how to set an empty iCollection c#如何设置一个空的 iCollection c#
【发布时间】:2014-02-23 02:41:00
【问题描述】:

我有三个收藏:

private ICollection<FPTAssetClassAsset> wrassets;
private ICollection<FPTFundAsset> wrfunds;
private ICollection<FPTManagedStrategyAsset> wrstrats;

如果 foreach 循环返回 0 个对象,则集合不会被设置,因此为 null。 当我将此收藏(联合)添加到另一个收藏时,它失败并显示:“值不能为空”,因为收藏为空,而不是空。如何将此集合设置为空?

循环:

    public void GetWrapperAssets(FPT fpt)
    {
        foreach (var w in fpt.CouttsPositionSection.Wrappers
        .Union(fpt.StandAloneSection.Wrappers)
        .Union(fpt.BespokePropositionSection.Wrappers)
        .Union(fpt.NonCouttsPositionSection.Wrappers)
        )
        {
            foreach (var a in w.UnderlyingAssets.OfType<FPTManagedStrategyAsset>())
            {
                wrstrats.Add(a);
            }
            foreach (var a in w.UnderlyingAssets.OfType<FPTAssetClassAsset>())
            {
                wrassets.Add(a);
            }
            foreach (var a in w.UnderlyingAssets.OfType<FPTFundAsset>())
            {
                wrfunds.Add(a);
            }
        }
    }

【问题讨论】:

  • 将每一个初始化为 = new Collection<...>()

标签: c# icollection


【解决方案1】:

如果您只是在寻找不会在阅读时崩溃的内容,则可以使用Array.Empty&lt;T&gt;,直到您可以将其替换为您认真使用的内容:

private ICollection<FPTAssetClassAsset> wrassets      = Array.Empty<FPTAssetClassAsset>();
private ICollection<FPTFundAsset> wrfunds             = Array.Empty<FPTFundAsset>();
private ICollection<FPTManagedStrategyAsset> wrstrats = Array.Empty<FPTManagedStrategyAsset>();

【讨论】:

    【解决方案2】:

    在 foreach 循环之前初始化您的集合,这样它们将始终具有一个值:

    private ICollection<FPTAssetClassAsset> wrassets = new Collection<FPTAssetClassAsset>();
    private ICollection<FPTFundAsset> wrfunds = new Collection<FPTFundAsset>();
    private ICollection<FPTManagedStrategyAsset> wrstrats = new Collection<FPTManagedStrategyAsset>();
    

    【讨论】:

    • 谢谢,由于抽象类的原因,我无法初始化新的 Collection,所以改用 List 并发挥了作用。
    【解决方案3】:

    好吧,您可以随时在添加之前检查null。或者你可以把它变成一个属性:

    private ICollection<FPTAssetClassAsset> wrassets
    { 
        get { return _wrassets == null ? new List<FPTAssetClassAsset>() : _wrassets; }
    }
    private ICollection<FPTAssetClassAsset> _wrassets;
    

    【讨论】:

    • 你在哪里设置_wrassets的值?上面的代码不会总是返回一个新的 List() 因为 _wrassets 从未设置?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-18
    • 2021-03-16
    • 1970-01-01
    • 2011-09-09
    • 2015-11-25
    • 1970-01-01
    相关资源
    最近更新 更多