当前位置:编程学习 > C#/ASP.NET >>

c#如何按声明顺序输出一个类的成员?

c#如何按声明顺序输出一个类的成员,使用GetFields()获取出来的成员顺序无法保证,请问如何才能保证按声明顺序输出? --------------------编程问答-------------------- Mission Impossible

--------------------编程问答--------------------
引用 1 楼 bloodish 的回复:
Mission Impossible

同意 --------------------编程问答--------------------
引用 1 楼 bloodish 的回复:
Mission Impossible

同上 --------------------编程问答-------------------- 成员的输出一般都是靠实例对象来做到的,而具体调用哪个实例方法又是不确定的。所以,楼上说的:“Mission Impossible”是对的。哈哈。 --------------------编程问答-------------------- lz想这样做,有何企图? --------------------编程问答-------------------- 那c#要把一个类的数据,导出为为一个文件,就做不到了? --------------------编程问答--------------------
引用 6 楼 yulohan 的回复:
那c#要把一个类的数据,导出为为一个文件,就做不到了?


你要序列化? --------------------编程问答-------------------- "按声明顺序输出一个类的成员"

你直接把成员后 + _01 _02 来人为设定吧

因为你的申明成员顺序不一定是编译器编译之后的顺序.

--------------------编程问答-------------------- 给成员加一个序号Attribute --------------------编程问答-------------------- 不知道楼主要的是不是这样?


   public class OrdinalAttribute : Attribute
    {
        private int ordinal;

        public OrdinalAttribute(int ordinal)
        {
            this.ordinal = ordinal;
        }

        public int Ordinal
        {
            get { return this.ordinal; }
            set { this.ordinal = value; }
        }
    }


    public class TestType
    {

        [Ordinal(0)]
        public int ZZZ = 0;

        [Ordinal(1)]
        public int UserId { get; set; }

        [Ordinal(2)]
        public int BBB { get; set; }

        [Ordinal(3)]
        public int AAA { get; set; }
    }



    class Program
    {

        public static int GetOrdinal(System.Reflection.MemberInfo member)
        {
            try
            {
                var attrs = member.GetCustomAttributes(typeof(OrdinalAttribute), false).Cast<OrdinalAttribute>();
                return attrs.First().Ordinal;
            }
            catch
            {
                return 0;
            }
        }

        static void Main(string[] args)
        {
            var result = typeof(TestType).GetMembers()
                .Where(m => m.MemberType == System.Reflection.MemberTypes.Field || m.MemberType == System.Reflection.MemberTypes.Property)
                .Select(m => new 
                { 
                    Member = m,
                    Ordinal = GetOrdinal(m) 
                })
                .OrderBy(m => m.Ordinal);
     
            foreach (var item in result)
            {
                Console.WriteLine("{0} - {1}", item.Member.Name, item.Ordinal);
            }
        }
    }
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,