MemberInfo[] info1=mtype.GetMembers(BindingFlags.Instance|BindingFlags.Public);如何对对象数组进行排序

hqz010 2009-04-02 08:51:56
MemberInfo[] info1=mtype.GetMembers(BindingFlags.Instance|BindingFlags.Public);如何对对象数组进行排序?最好是可以在GetMembers就让里按实体对象的定义顺序读取最好
...全文
141 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
hqz010 2009-04-02
  • 打赏
  • 举报
回复
本来是要给你多些,我刚才想加分,但是网站提示要等明天,明天我给你再加分吧,你关注一下!谢谢三位的帮助!
hqz010 2009-04-02
  • 打赏
  • 举报
回复
刚才yangqidong 给错了!不好意思!
hqz010 2009-04-02
  • 打赏
  • 举报
回复
多谢各位的帮助!结贴!再次感谢!
zgke 2009-04-02
  • 打赏
  • 举报
回复
恩 忘记了 可以用简单的方法

private void button1_Click(object sender, EventArgs e)
{
MemberInfo[] info1 = typeof(Button).GetMembers(BindingFlags.Instance | BindingFlags.Public);
IComparer _Sort = new myReverserClass();
Array.Sort(info1, _Sort);

}

public class myReverserClass : IComparer
{
int IComparer.Compare(Object x, Object y)
{
MemberInfo _X = (MemberInfo)x;
MemberInfo _Y = (MemberInfo)y;
return string.Compare(_X.Name,_Y.Name);
}
}
hqz010 2009-04-02
  • 打赏
  • 举报
回复
我用的是vs2008的,但是没有OrderBy这个啊!
出现这个错误 “System.Array”不包含“OrderBy”的定义,并且找不到可接受类型为“System.Array”的第一个参数的扩展方法“OrderBy”(是否缺少 using 指令或程序集引用?)
zgke 2009-04-02
  • 打赏
  • 举报
回复
private void button1_Click(object sender, EventArgs e)
{
MemberInfo[] info1 = typeof(Button).GetMembers(BindingFlags.Instance | BindingFlags.Public);
SortMemberInfo[] _Sort = new SortMemberInfo[info1.Length];
for (int i = 0; i != info1.Length; i++)
{
_Sort[i] = new SortMemberInfo(info1[i]);
}
Array.Sort(_Sort);
}

public class SortMemberInfo : IComparable
{
private MemberInfo m_Info = null;
public MemberInfo Info { get { return m_Info; } set { m_Info = value; } }

public SortMemberInfo(MemberInfo p_Info)
{
m_Info = p_Info;
}

public int CompareTo(object obj)
{
SortMemberInfo _Temp = (SortMemberInfo)obj;
return String.Compare(Info.Name, _Temp.Info.Name);
}
}
yangqidong 2009-04-02
  • 打赏
  • 举报
回复
MemberInfo[] info1=mtype.GetMembers(BindingFlags.Instance|BindingFlags.Public).OrderBy(mi => mi.Name).ToArray< MemberInfo >();

如果用的是vs2008的话
hqz010 2009-04-02
  • 打赏
  • 举报
回复
谢谢,如果这样,那么能不能在取得后,对info1对象数组进行排序,如何排都可以!因为这个返回的结果顺序是随机的,我的程序里有根据这个一一对属性给值,顺序不固定,变成值给的不对!
fiveandfive 2009-04-02
  • 打赏
  • 举报
回复
GetMembers里没有参数可以实现.
个人观点:
public stirng s1 = "s1";
public void Doit()
{
}

public void Doit()
{
}
public stirng s1 = "s1";
上述两个写法顺序对编绎器来说,编绎结果是一样的,所以,如果要实现按实体对象的定义顺序是不行的
hqz010 2009-04-02
  • 打赏
  • 举报
回复
谢谢!但是这种用法没有Sort()方法!
yangqidong 2009-04-02
  • 打赏
  • 举报
回复
MemberInfo[] info1=mtype.GetMembers(BindingFlags.Instance|BindingFlags.Public).Sort();

110,538

社区成员

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

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

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