我正在创建一个函数来读取自定义对象中的整数内容。
自定义对象包含在包装类中,由以下部分组成:
public class IODBTLMNG
{
public int data0 = new int();
public int data1 = new int();
public int data2 = new int();
public int data3 = new int();
public int data4 = new int();
public int data5 = new int();
public int data6 = new int();
public int data7 = new int();
public int data8 = new int();
public int data9 = new int();
public int data10 = new int();
}
我需要在使用对象的类中循环对象“数据”,我不能使用数组,因为属于 dll 的原始函数不允许它(用 DllExtern 包装类)。 我想实现的功能应该循环 DataX 字段。 我在下面写了一个例子:
private int[] GetInteger()
{
int[] result = new int[10];
IODBTLMNG obj = new IODBTLMNG();
obj = PopolateObject();
for (int i = 0; i < 11; i++)
{
result[i] = obj.(data + i); // The problem is this (Data i)
}
return result;
}
这可能吗?
编辑:
感谢您的回答。对于整数它工作。我需要使问题复杂化。如果数据不是整数而是一个类,IODBTLMNG 由以下部分组成:
public class IODBTLMNG
{
public IODBTLMNG_data data1 = new IODBTLMNG_data();
public IODBTLMNG_data data2 = new IODBTLMNG_data();
public IODBTLMNG_data data3 = new IODBTLMNG_data();
public IODBTLMNG_data data4 = new IODBTLMNG_data();
public IODBTLMNG_data data5 = new IODBTLMNG_data();
public IODBTLMNG_data data6 = new IODBTLMNG_data();
public IODBTLMNG_data data7 = new IODBTLMNG_data();
public IODBTLMNG_data data8 = new IODBTLMNG_data();
public IODBTLMNG_data data9 = new IODBTLMNG_data();
public IODBTLMNG_data data10 = new IODBTLMNG_data();
}
IODBTLMNG_data 由:
public class IODBTLMNG_data
{
public int T_code;
public int life_count;
}
如果需要提取T_code,可以使用反射吗?谢谢
已解决的编辑:
好的...我在这种模式下使用支持变量 IODBTLMNG_data (obj_data) 解决了问题:
obj_data = (IODBTLMNG_data)(obj.GetType().GetField($"data{i}").GetValue(obj));
和:
result[i] = obj_data.T_code;
谢谢
最佳答案
如果您必须按原样使用IODBTLMNG
类并且您不能重新设计它,我建议使用Reflection :
using System.Reflection;
...
result[i] = (int) (obj.GetType().GetField($"data{i + 1}").GetValue(obj));
编辑:换句话说(见评论),如果您想通过名称读取public
(instance)字段:
var obj = ...
string fieldName = "T_code"; // or "life_count", or "data5" - whatever
object value = obj // for the instance obj
.GetType(fieldName) // get its type (IODBTLMNG_data)
.GetField() // given type, find (with a help of Reflect) field description
.GetValue(obj); // read field's value for the obj instance
int myResult = (int) value; // cast to int
关于c# - 在循环中拦截变量名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49551232/