通过结构迭代?

我希望能够在C#(.Net 2.0)中迭代结构的值。 这将在运行时完成,不知道结构中可能的值。

我正在考虑使用Reflection将结构值添加到列表中,或者将结构转换为实现IEnumerable接口的数据结构。 任何人都可以提供任何指示吗?

在此先感谢您的帮助。

此致,安迪。

究竟是什么意思 – 结构中的各个字段? 或许属性? 如果是这样, Type.GetFields()Type.GetProperties()是要走的路。

顺便说一下,你绝对确定需要使用结构吗? 这很少是C#中最好的设计决策,特别是如果struct包含多个值。

编辑:是的,似乎结构被用于遗留原因。

我之前没有提到的一件事:如果struct的字段不公开,则需要指定适当的BindingFlags(例如BindingFlags.Instance | BindingFlags.NonPublic )。

在最简单的级别,假设您要迭代属性:

 PropertyInfo[] properties = myStructInstance.GetType().GetProperties(); foreach (var property in properties) { Console.WriteLine(property.GetValue(myStructInstance, null).ToString()); } 

我用的东西如下:

 [StructLayout(LayoutKind.Sequential)] public struct MY_STRUCT { public uint aa; public uint ab; public uint ac; } MY_STRUCT pMS = new MY_STRUCT(); FieldInfo[] fields = pMS.GetType().GetFields(); foreach (var xInfo in fields) Console.WriteLine(xInfo.GetValue(pMS).ToString()); 

要使它适用于每个结构,您必须使用reflection。 如果要声明具有此function的一组结构,可以使它们实现IEnumerable>并将GetEnumerator()定义为:

 yield return new KeyValuePair("Field1", Field1); yield return new KeyValuePair("Field2", Field2); // ... and so forth 

有关使用Reflection的示例,请参阅system.reflection.propertyinfo文档。