You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#使用反射修改模型类属性名时出现空引用异常如何解决

问题排查

你遇到的空引用报错:

Object Reference not set to an instance of an object

由两个核心问题共同触发:

  • 你实例化Example1后没有给Property1属性赋值,myProperties.Property1默认是null,调用myProperties.Property1.Fruit本身就会触发空引用异常
  • 反射方法的传参逻辑完全错误:
    1. 你要修改的是Property1类的Fruit属性,所以反射方法的第一个入参应该是myProperties.Property1实例,而不是Example1实例,Example1类本身根本没有名为Fruit的属性,所以GetProperty方法会返回null,调用property.SetValue自然会报错
    2. 反射方法的第二个入参需要是字符串形式的属性名"Fruit",而你传的是myProperties.Property1.Fruit的运行时值,完全不符合参数要求

修正方案

首先修正实例化逻辑,初始化Property1属性:

var firstName = "Car";
Example1 myProperties = new Example1()
{
    Property1 = new Property1()
};

然后修正反射方法调用逻辑:

SetPropertyValue(myProperties.Property1, "Fruit", firstName);

执行后myProperties.Property1.Fruit的值就会被设置为"Car"。


额外说明

如果你的真实需求是修改类定义中的属性名称,把Fruit改成Car,C#作为静态编译型语言不支持运行时修改已定义类的元数据结构:

  • 如果是需要序列化/反序列化时用别名,可以给属性加对应序列化特性实现
  • 如果需要运行时动态增减属性,可以使用ExpandoObject等动态类型实现

内容的提问来源于stack exchange,提问作者MarkCo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 00:39:04