C#无法向expando对象添加动态键和值
我有一个动态expando对象,无法向其中添加值。我得到的对象引用未设置为对象的实例错误C#无法向expando对象添加动态键和值,c#,C#,我有一个动态expando对象,无法向其中添加值。我得到的对象引用未设置为对象的实例错误 public class GameSet { public GameAttributes Attributes { get; set; } } public class GameAttributes { public GameAttributes () { dynamic expando = new
public class GameSet
{
public GameAttributes Attributes { get; set; }
}
public class GameAttributes
{
public GameAttributes ()
{
dynamic expando = new ExpandoObject();
var Attribute = expando as IDictionary<string,string>;
}
public IDictionary<string,string> Attribute { get; set; }
}
var gameAttributes = new GameAttributes ();
gameAttributes.Attribute.Add(OtherDataModelAttribute.name, OtherAttributeAttribute.value); // Error comes in this line
公共类游戏集
{
公共游戏属性{get;set;}
}
公共类游戏属性
{
公共游戏属性()
{
动态expando=新的ExpandoObject();
var属性=expando作为IDictionary;
}
公共IDictionary属性{get;set;}
}
var gameAttributes=新的gameAttributes();
gameAttributes.Attribute.Add(OtherDataModelAttribute.name,OtherAttributeAttribute.value);//这一行有错误
这一行
var Attribute = expando as IDictionary<string,string>;
将动态expando对象指定给新对象
var Attribute = expando as IDictionary<string,string>;
var Attribute=expando作为IDictionary;
不是类的属性。
所以
公共IDictionary属性{get;set;}
还没有分配。因此,它抛出异常
尝试将您的代码更改为
public GameAttributes ()
{
dynamic expando = new ExpandoObject();
this.Attribute = expando as IDictionary<string,string>;
}
公共游戏属性()
{
动态expando=新的ExpandoObject();
this.Attribute=expando作为IDictionary;
}
如前面的回答所述,构造函数中存在错误(使用var创建局部变量,而不是使用此.Attribute分配给成员变量)
还有一个bug
无法将ExpandoObject强制转换为
IDictionary<string,string>
IDictionary
相反,它可以铸造为:
IDictionary<string, object>
IDictionary
定义为属性的属性
未在您将var Attribute=expando编写为IDictionary的构造函数中的代码中初始化;您可能只希望Attribute=expando作为IDictionary;
IDictionary<string,string>
IDictionary<string, object>