如何更改通过反射 C# 获取的属性值

Posted

技术标签:

【中文标题】如何更改通过反射 C# 获取的属性值【英文标题】:How To Change Property Value Which Was Get By Reflection C# 【发布时间】:2015-05-21 13:19:16 【问题描述】:

我有一个带有按钮类的 dll。它看起来像这样:

internal class CoolButton12345: UserControl

  all fields, properties and methods...
  public Image Imageget;set;

我正在尝试将此按钮属性值更改为我自己的值。

dynamic playButton = typeof (FooDll).Assembly.GetType("ClassWhichHasThisButton")
                .GetFields(BindingFlags.Instance | BindingFlags.NonPublic)
                .FirstOrDefault(x => x.Name == "playButton").GetValue(FooInstance.Controls[0]);
playButton.Image = (Image)pauseBitmap;

但是我收到了这个错误

未处理的类型异常 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' 发生在 System.Core.dll

为什么我的方法不对? 请告诉我我可以做这样的事情吗? 如果我可以请帮助找到如何做到这一点。

【问题讨论】:

【参考方案1】:

试试这个:

dynamic playButton = FooInstance.playButton;

playButton.Image = (Image)pauseBitmap;

【讨论】:

能否请您添加一些代码,我该怎么做? 没关系,但我需要为playButton的Image属性设置值,而不是playButton。 那么你需要reflect该对象的Image属性。 我可以从 Controls 数组中获取实例。所以它有 UserControl 类型。 我得到异常:“'System.Windows.Forms.UserControl' 不包含 'Image' 的定义”

以上是关于如何更改通过反射 C# 获取的属性值的主要内容,如果未能解决你的问题,请参考以下文章

c# 如何通过反射 获取设置属性值

java中如何通过反射获取类的属性

C#通过反射获取不同命名空间下的类(属性和方法)

java如何通过反射获取包中所有的类?

通过 COM 对象的反射获取属性名称

C# 反射和获取属性