我在使用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中引发异常,但它从未扔过。
发现问题[字典属性总是为空,尽管字典被实例化,这似乎相似,但在我的情况下,无论序列化如何,这似乎都会发生。
有什么想法吗?
答案 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
唯一奇怪的是我试图逼迫的例外,它从未扔过,并“把我扔了。”