Unity C#中给OpenSea NFT元数据加属性时遇空引用异常求助
解决C#中Attribute数组赋值的NullReferenceException异常
触发NullReferenceException的原因是:创建RootObject实例后,attributes数组默认是null,直接访问rootObject.attributes[0]时,相当于尝试访问一个未初始化的空对象的索引,自然会抛出异常。
解决方法一:初始化数组并创建Attribute实例
修改updatethePlayerData()函数,先为数组分配内存,再实例化数组中的Attribute对象:
public void updatethePlayerData() { RootObject rootObject = new RootObject(); rootObject.description = "aaa"; rootObject.image = "bbb"; rootObject.external_url = "ccc"; rootObject.name = "dddd"; // 初始化数组,设置需要的长度(这里设为1) rootObject.attributes = new Attribute[1]; // 为数组元素创建Attribute实例 rootObject.attributes[0] = new Attribute(); rootObject.attributes[0].trait_type = "character_class"; rootObject.attributes[0].value = "name of character"; }
解决方法二:改用List(更灵活)
如果需要动态添加多个属性,建议把数组换成List<Attribute>,这样无需提前指定长度:
首先修改RootObject类:
public class RootObject { public string description; public string external_url; public string image; public string name; // 初始化List<Attribute>,避免null public List<Attribute> attributes = new List<Attribute>(); }
然后在函数中添加属性:
public void updatethePlayerData() { RootObject rootObject = new RootObject(); rootObject.description = "aaa"; rootObject.image = "bbb"; rootObject.external_url = "ccc"; rootObject.name = "dddd"; // 直接添加新的Attribute实例并赋值 rootObject.attributes.Add(new Attribute { trait_type = "character_class", value = "name of character" }); }
内容的提问来源于stack exchange,提问作者immi khan
相关产品推荐
相关产品推荐

