0

我在使用 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如果和的计数不同,我还尝试在属性 getter 中引发异常_validTargets as List<ModelRootEntity>,但它从未抛出。

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

有任何想法吗?

4

2 回答 2

0

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

更换:

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

和:

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

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

唯一奇怪的是我试图强迫它从未抛出的异常,并“抛出”了我。

于 2013-09-01T16:41:07.197 回答
0

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

于 2013-09-01T03:47:58.093 回答