c# - 使用反射设置对象属性

标签 c# .net reflection properties

在 C# 中有没有一种方法可以使用反射来设置对象属性?

例如:

MyObject obj = new MyObject();
obj.Name = "Value";

我想用反射设置obj.Name。像这样的东西:

Reflection.SetProperty(obj, "Name") = "Value";

有没有办法做到这一点?

最佳答案

是的,您可以使用Type.InvokeMember():

using System.Reflection;
MyObject obj = new MyObject();
obj.GetType().InvokeMember("Name",
    BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetProperty,
    Type.DefaultBinder, obj, "Value");

如果 obj 没有名为 Name 的属性,或者无法设置,这将引发异常。

另一种方法是获取属性的元数据,然后对其进行设置。这将允许您检查该属性是否存在,并验证它是否可以设置:

using System.Reflection;
MyObject obj = new MyObject();
PropertyInfo prop = obj.GetType().GetProperty("Name", BindingFlags.Public | BindingFlags.Instance);
if(null != prop && prop.CanWrite)
{
    prop.SetValue(obj, "Value", null);
}

关于c# - 使用反射设置对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/619767/

相关文章:

c# - Linq.Dynamic FirstOrDefault() 嵌套在 OrderBy 中

c# - 在此实现中,hashset.contains如何为O(1)?

c# - C# 中的循环按钮背景图像

c# - 有什么简单的方法可以将数据导出为多种格式吗?

java - 有没有办法将方法作为参数传递给方法?

c# - "URI formats are not supported."异常刚刚开始出现在非常旧的、未更改的代码中

c# - 如何使用 viewmodelocator 在 View 模型之间发送参数

c# - 尝试声明并行任务时出错

java - Kotlin:javaSetter 方法未编译

c# - 使用反射获取方法描述