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

如何通过属性名以赋值语法设置C#对象的属性值?

可行,但要注意几个关键点

首先明确:你代码里的myProp是字段而非C#中的属性(Property),二者是不同的语法元素。要实现你想要的对象.GetXXX("名称") = 值这种左值赋值方式,在C# 7.0及以上版本可以通过返回ref引用实现。

具体实现方案

给Test类添加一个返回字段引用的方法:

class Test {
    public string myProp;

    public Test() {
    }

    // 根据字段名返回对应字段的引用
    public ref string GetField(string fieldName) {
        if (fieldName == nameof(myProp)) {
            return ref myProp;
        }
        throw new ArgumentException($"字段 {fieldName} 不存在");
    }
}

之后就可以按你想要的方式赋值:

Test testObject = new Test();
// 直接通过方法调用完成赋值
testObject.GetField("myProp") = "测试内容";

原理说明

这个方法利用了C#的ref返回特性,让方法直接返回字段的内存引用,这样方法调用表达式就能作为左值使用,直接完成赋值操作——完全符合你的要求:不用PropertyInfo.SetValue,也不用直接写testObject.myProp = ...。

需要注意:如果是真正的C#属性(带get; set;的那种),因为属性本质是封装的get/set方法,无法直接返回它的引用,所以这种方案只适用于字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 04:53:10