通过反射来获取类中属性的值是一个反射很常见的应用,今天小晨晨给了个他的需求让我帮着写下代码。
需求如下:
实现自定义类的排序,排序的字段可以自己设置。
很明显了,反射的应用,代码很简单,贴出来
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
--------------------------------------
代码比较简单,不做过多解释。