c# - 使用反射循环遍历类中的结构
问题描述
public struct volt_struct
{
public string volt1;
public string volt2;
public string volt2;
public string volt3;
}
private class Injection_class
{
public volt_struct stru1;
public volt_struct stru2;
public volt_struct stru3;
public volt_struct stru4;
public volt_struct stru5;
public volt_struct stru6;
}
public void main()
{
Injection_class Time = new Injection_class();
//Here is code that fills Time with Time values as string type
string s="";
FieldInfo[] fi_inner = Time.stru1.GetType().GetFields();
FieldInfo[] fi_outer = Time.GetType().GetFields();
// This part is wrong, but shows what I want to achive.
foreach(FieldInfo field_outer in fi_outer)
{
foreach(FieldInfo field_inner in fi_inner)
{
s = string.concat(s+field_outer.field_inner.GetValue(Time) + ";");
}
}
}
我想使用反射将存储在 Time 中的字符串连接到字符串 s 中。稍后我必须修改类和结构,我不想调整连接代码。
通过对类中的每个结构使用 foreach 循环,我得到了想要的结果。
foreach (FieldInfo field in fi_inner)
{
s = string.Concat(s + field.GetValue(Time.stru1) + ";");
//field.SetValue(Time, "not measured"); //reset value
}
foreach (FieldInfo field in fi_inner)
{
s = string.Concat(s + field.GetValue(Time.stru2) + ";");
//field.SetValue(Time, "not measured"); //reset value
}
//and so one for each other struct
我想像我给出的第一个例子一样实现它。这可能吗?
解决方案
你可以更容易地做到这一点而无需反思。像这样更改结构和类:
public struct volt
{
private string[] _volts = new string[4];
public string[] volts {get {return _volts;} }
public string volt1 {
get {return _volts[0];}
set {_volts[0] = value;}
}
public string volt2 {
get {return _volts[1];}
set {_volts[1] = value;}
}
public string volt3 {
get {return _volts[2];}
set {_volts[2] = value;}
}
public string volt4 {
get {return _volts[3];}
set {_volts[3] = value;}
}
}
private class Injection
{
private _volt[] = new volt[5];
public volt[] {get {return _volt;} }
public volt stru1 {
get {return _volt[0];}
set {_volt[0] = value;}
}
public volt stru2 {
get {return _volt[1];}
set {_volt[1] = value;}
}
public volt stru3 {
get {return _volt[2];}
set {_volt[2] = value;}
}
public volt stru4 {
get {return _volt[3];}
set {_volt[3] = value;}
}
public volt stru5 {
get {return _volt[4];}
set {_volt[4] = value;}
}
public volt stru6 {
get {return _volt[5];}
set {_volt[5] = value;}
}
}
现在你有了可以使用的漂亮、方便的数组:
public void main()
{
Injection Time = new Injection();
//Here is code that fills Time with Time values as string type
string result = "";
foreach(volt v in Time.volt)
{
foreach(string s in v.volts)
{
result += s + ";"
}
}
Console.WriteLine(result);
}
推荐阅读
- python - 如何在 Python 中测试这个函数... TypeError: object not callable
- apache - ActiveMQ in Katalon Studio
- swift - 如何截取正在播放 AVPlayer 的 UIView 截图?
- excel - VBA Excel 宏条件中的 For 循环未按预期工作
- c# - ORA-01008: 并非所有变量都绑定 - ASP.net Web 应用程序
- javascript - IOS Safari iPad 输入文件多重锁定 相机作他用
- python - django 表单字段小部件中版本 3.35 的 Google 地图 API 问题
- sql-server - Polybase 不创建外部文件格式
- windows - 批处理文件 FOR /F 循环中的 git --format 字符串有问题吗?
- react-native - 如何在循环中使用复选框以做出天真的反应