对于有嵌套的结构体,怎么遍历所以的数据呢?
前面发过一个贴如下,
http://bbs.csdn.net/topics/390550449?page=1#post-395330675
如果当前BLC是这样的
struct BLC
{
int a,
int b,
struct DCE dce
struct FG fg;
}
struct DCE
{
int [] haha;
int f;
}
要怎么个循环法呢?谢谢
[解决办法]
在你上个帖子的基础上改了下,说实话,真心不喜欢这种输出,没啥意义:
public struct BLC
{
public int a;
public int b;
public DCE dce;
public FG fg;
};
public struct DCE
{
public int[] haha;
public int f;
};
public struct FG
{
public int[] data;
}
static void WriteStructValue(object obj, string pname, StringBuilder sb)
{
Type type = obj.GetType();
string typename = pname + "." + type.Name;
foreach (FieldInfo mi in type.GetFields(BindingFlags.Public
[解决办法]
BindingFlags.Instance))
{
if (mi.FieldType.IsPrimitive)
{
sb.AppendLine(typename + "=" + mi.GetValue(obj));
}
else if (mi.FieldType.IsArray)
{
WriteArrayValue(mi.GetValue(obj), typename, sb);
}
else
WriteStructValue(mi.GetValue(obj), typename, sb);
}
}
static void WriteArrayValue(object obj, string pname, StringBuilder sb)
{
Array arr = obj as Array;
if (arr != null)
{
Type type = obj.GetType();
string typename = pname + "." + type.Name;
foreach (var item in arr)
{
if (item.GetType().IsPrimitive)
{
sb.AppendLine(typename + "=" + item);
}
else if (item.GetType().IsArray)
{
WriteArrayValue(item, typename, sb);
}
else
WriteStructValue(item, typename, sb);
}
}
}
static void Main(string[] args)
{
BLC blc;
blc.a = 1;
blc.b = 2;
blc.dce.haha = new int[] { 3, 4, 5 };
blc.dce.f = 7;
blc.fg.data = new int[] { 8, 9 };
StringBuilder sb = new StringBuilder();
Type type = typeof(BLC);
string typename = type.Name;
foreach (FieldInfo mi in type.GetFields(BindingFlags.Public
[解决办法]
BindingFlags.Instance))
{
if (mi.FieldType.IsPrimitive)
{
sb.AppendLine(typename + "=" + mi.GetValue(blc));
}
else if (mi.FieldType.IsArray)
{
WriteArrayValue(mi.GetValue(blc), typename, sb);
}
else
WriteStructValue(mi.GetValue(blc), typename, sb);
}
Console.WriteLine(sb.ToString());
Console.Read();
return;
}