gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 03:28:16 24 4
gpt4 key购买 nike

在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com