【发布时间】:2023-02-16 18:23:46
【问题描述】:
我必须上有嵌套类的高年级
public class Preferences
{
public FunctionClass function { get; set; } = new FunctionClass();
public class FunctionClass
{
public string programfolder { get; set; } = "";
...
}
public LoggerClass logger { get; set; } = new LoggerClass();
public class LoggerClass
{
public string logFolder { get; set; } = "Log";
...
}
public OptionClass options { get; set; } = new OptionClass();
public class OptionClass
{
public bool showGraphics { get; set; } = true;
...
}
public MqttSpSetupClass MqttSpSetup { get; set; } = new MqttSpSetupClass();
public class MqttSpSetupClass
{
public string strAddress { get; set; } = "localhost";
...
}
}
所以我希望反射在每个内部类的所有成员上循环
PropertyInfo[] props_Outer = typeof(IoAppPreferences).GetProperties();
int counter = 0;
foreach (PropertyInfo prop_Upper in props_Outer)
{
var sName_Outer = prop_Upper.Name;
var val_Outer = props_Outer.GetValue(counter ++);
PropertyInfo[] properties_Inner;
switch (sName_Outer.ToUpper())
{
case "DIMS": properties_Inner = typeof(IoAppPreferences.DimsClass).GetProperties(); break;
...
}
foreach (PropertyInfo prop_Inner in properties_Inner)
{
var sName = prop_Inner.Name;
//prefs.function
var sVal = prop_Inner.GetValue(val_Outer);<------ERROR
switch (prop_Inner.Name.ToUpper())
{
...
}
}
所以我在放箭头的地方出错了。原因是 val_Outer 是 FunctionClass 函数,而如果我硬编码 prefs.function 就可以了。当然,我可以为每个人设置一个开关,但我的问题是:有没有更好的方法来解决它?
我见过this solution 但不能满足我的需求
谢谢
帕特里克
【问题讨论】:
-
什么错误?请不要告诉那是空指针...(这是...因为
props_Outer.GetValue(counter ++);没有意义并且很可能会返回null)
标签: c# wpf reflection inner-classes