如何通过属性名以赋值语法设置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
相关产品推荐
相关产品推荐

