C#无法向expando对象添加动态键和值

C#无法向expando对象添加动态键和值,c#,C#,我有一个动态expando对象,无法向其中添加值。我得到的对象引用未设置为对象的实例错误 public class GameSet { public GameAttributes Attributes { get; set; } } public class GameAttributes { public GameAttributes () { dynamic expando = new

我有一个动态expando对象,无法向其中添加值。我得到的对象引用未设置为对象的实例错误

 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>