Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在不使用反射的情况下在c#中迭代结构变量?_C#_Struct_Iteration - Fatal编程技术网

如何在不使用反射的情况下在c#中迭代结构变量?

如何在不使用反射的情况下在c#中迭代结构变量?,c#,struct,iteration,C#,Struct,Iteration,在我的项目中,我必须更改数据类型(如int、float、short等)的尾数。我认为最好的方法是访问结构的元素,然后更改它们的尾数(如果它们大于1字节)。结构非常长,必须以自动方式执行此操作 结构: struct { int a; short b; char c; int d; int e; float f; char g; int h } 在没有反射的情况下,不能动态迭代类/结构成员。你应该尝试不同的方法,或者考虑使用反射。< /P> 编辑: 您可以尝试将结构数据与4字节边界对齐: [St

在我的项目中,我必须更改数据类型(如int、float、short等)的尾数。我认为最好的方法是访问结构的元素,然后更改它们的尾数(如果它们大于1字节)。结构非常长,必须以自动方式执行此操作

结构:

struct
{
int a;
short b;
char c;
int d;
int e;
float f;
char g;
int h
}

在没有反射的情况下,不能动态迭代类/结构成员。你应该尝试不同的方法,或者考虑使用反射。< /P>
编辑:

您可以尝试将结构数据与4字节边界对齐:

[StructLayout(LayoutKind.Sequential, Pack = 4)]
struct ExampleStruct{ ... }

然后,您将通过
不安全的
原始指针访问结构数据,并忽略每个4字节块前面的0值字节。

将.cs文件复制到输出目录(调试)。现在你可以用你的文字做任何事情了!解析它


干杯

问题是int=4字节,short=2字节,char=1字节,等等。如果您不想使用反射,我建议您编写一个可以遍历源代码的解析器,并自动创建正确的源代码。