如何通过Tag类及反射设置BFrame类的Value属性?
如何通过Tag类设置BFrame的Value属性?
先看你的类定义,其实有两种实现方式——先给你说最直接简单的方案,再讲反射的写法(毕竟你已经在写反射相关的代码了,推测可能有特殊场景需求)。
情况1:直接访问(推荐,无需反射)
你的Tag类的Frame属性是公共可读的,而且BFrame的Value是可读写的,完全不需要绕反射,直接写就行:
public void func(Tag tag, string newValue) { // 先做空值检查,避免空引用异常 if (tag?.Frame != null) { tag.Frame.Value = newValue; } }
情况2:必须用反射的场景
如果是因为通用逻辑或者其他限制必须用反射来操作,那可以按步骤来:先拿到Tag的Frame属性实例,再获取BFrame的Value属性并设置值:
using System.Reflection; public void func(Tag tag, string newValue) { if (tag == null) return; // 1. 获取Tag类的Frame属性 PropertyInfo frameProp = tag.GetType().GetProperty("Frame"); if (frameProp == null) return; // 2. 获取Frame属性对应的BFrame实例 var frameInstance = frameProp.GetValue(tag) as BFrame; if (frameInstance == null) return; // 3. 获取BFrame类的Value属性 PropertyInfo valueProp = typeof(BFrame).GetProperty("Value"); if (valueProp == null) return; // 4. 设置Value的新值 valueProp.SetValue(frameInstance, newValue); }
注意:不管哪种方式,都要做好空值判断,不然很容易出现NullReferenceException——比如tag本身是null,或者tag.Frame返回null的情况。
内容的提问来源于stack exchange,提问作者Randall Flagg
相关产品推荐
相关产品推荐

