反射获取Class中Property的值

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

需求如下:

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

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

   

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

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

代码比较简单,不做过多解释。

原文地址:https://www.cnblogs.com/myself/p/1658716.html