首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

对于有嵌套的结构体,如何遍历所以的数据呢

2013-09-06 
对于有嵌套的结构体,怎么遍历所以的数据呢?前面发过一个贴如下,http://bbs.csdn.net/topics/390550449?pag

对于有嵌套的结构体,怎么遍历所以的数据呢?
前面发过一个贴如下,
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;
        }

热点排行