gpt4 book ai didi

c# - 在循环中拦截变量名

转载 作者:太空宇宙 更新时间:2023-11-03 19:43:30 25 4
gpt4 key购买 nike

我正在创建一个函数来读取自定义对象中的整数内容。

自定义对象包含在包装类中,由以下部分组成:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com