的IList<>即使实例化成员,属性也保持为null

时间:2013-09-01 03:46:01

标签: c# properties null ilist

我在使用IList属性时遇到问题,即使成员正在实例化,它仍然似乎返回null:

    private List<ModelRootEntity> _validTargets = new List<ModelRootEntity>();

    public IList<IModelRootEntity> ValidTargets
    {
        get
        {
            return _validTargets as IList<IModelRootEntity>;
        }
        protected internal set
        {
            if (value == null)
                _validTargets.Clear();
            else
                _validTargets = value as List<ModelRootEntity>;
        }
    }

ModelRootEntity实施IModelRootEntity。我在调试期间观察了两个值,而成员显示正数,属性保持为空。

如果_validTargets_validTargets as List<ModelRootEntity>的计数不同,我也尝试在属性getter中引发异常,但它从未扔过。

发现问题[字典属性总是为空,尽管字典被实例化,这似乎相似,但在我的情况下,无论序列化如何,这似乎都会发生。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

如果您将属性设置为任何非List<ModelRootEntity>的值,则as表达式将返回null,并且该属性将变为空。

答案 1 :(得分:0)

我找到了答案,感谢上面的@Nilesh评论。

更换:

private List<ModelRootEntity> _validTargets = new List<ModelRootEntity>();

使用:

private List<IModelRootEntity> _validTargets = new List<ModelRootEntity>();

暴露了真正的问题。第二行不会编译。以下帖子解释了原因: C# newbie List<Interface> question

唯一奇怪的是我试图逼迫的例外,它从未扔过,并“把我扔了。”