您的位置:首页 > 运维架构

反射获取Class中Property的值

2010-01-28 18:13 148 查看
通过反射来获取类中属性的值是一个反射很常见的应用,今天小晨晨给了个他的需求让我帮着写下代码。

需求如下:

实现自定义类的排序,排序的字段可以自己设置。

很明显了,反射的应用,代码很简单,贴出来

  

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.Collections;

namespace ReflectToGetProperty
{
public class Program
{
static void Main(string[] args)
{
Class1 myClass1 = new Class1();
myClass1.ID = 1;
myClass1.Name = "myself";

Class1 myClass2 = new Class1();
myClass2.ID = 2;
myClass2.Name = "heqingming";

List<Class1> list = new List<Class1>();
list.Add(myClass1);
list.Add(myClass2);

Console.WriteLine("排序前");
foreach (Class1 item in list)
{
Console.WriteLine(item.ID);
Console.WriteLine(item.Name);
Console.WriteLine();
}

Class1Compare compare = new Class1Compare();
compare.FieldName = "Name";//这里算是自己可以定制按照哪个字段进行排序
list.Sort(compare);

Console.WriteLine("排序后");
foreach (Class1 item in list)
{
Console.WriteLine(item.ID);
Console.WriteLine(item.Name);
Console.WriteLine();
}

Console.Read();
}
}

public class Class1
{
public int ID { get; set; }

public string Name { get; set; }

}

public class Class1Compare : IComparer<Class1>
{
public string FieldName { get; set; }

#region IComparer<Class1> 成员

public int Compare(Class1 x, Class1 y)
{

     //反射的应用
Type myType = x.GetType();

return string.Compare(myType.GetProperty(this.FieldName).GetValue(x, null).ToString(), myType.GetProperty(this.FieldName).GetValue(y, null).ToString());
}

#endregion
}
}

运行结果:

--------------------------------------

排序前
1
myself

2
heqingming

排序后
2
heqingming

1
myself

--------------------------------------

代码比较简单,不做过多解释。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: