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

yulohan 2010-09-21 03:21:07
c#如何按声明顺序输出一个类的成员,使用GetFields()获取出来的成员顺序无法保证,请问如何才能保证按声明顺序输出?
...全文
290 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
种草德鲁伊 2010-09-21
  • 打赏
  • 举报
回复
不知道楼主要的是不是这样?


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);
}
}
}
种草德鲁伊 2010-09-21
  • 打赏
  • 举报
回复
给成员加一个序号Attribute
鸭梨山大帝 2010-09-21
  • 打赏
  • 举报
回复
"按声明顺序输出一个类的成员"

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

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

monkchen 2010-09-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 yulohan 的回复:]
那c#要把一个类的数据,导出为为一个文件,就做不到了?
[/Quote]

你要序列化?
yulohan 2010-09-21
  • 打赏
  • 举报
回复
那c#要把一个类的数据,导出为为一个文件,就做不到了?
whslovexyp 2010-09-21
  • 打赏
  • 举报
回复
lz想这样做,有何企图?
幸运的意外 2010-09-21
  • 打赏
  • 举报
回复
成员的输出一般都是靠实例对象来做到的,而具体调用哪个实例方法又是不确定的。所以,楼上说的:“Mission Impossible”是对的。哈哈。
myjavamosquito 2010-09-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bloodish 的回复:]
Mission Impossible
[/Quote]
同上
天问一号 2010-09-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bloodish 的回复:]

Mission Impossible
[/Quote]
同意
bloodish 2010-09-21
  • 打赏
  • 举报
回复
Mission Impossible

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧