using System; 
using System.Reflection; public class ColumNameAttribute : Attribute 

public ColumNameAttribute(string name) 

this.ColumName = name; 

public string ColumName { get; set; } 
} public class Student 

[ColumName("Student.Name")] 
public string Name { get; set; } 
[ColumName("Student.Age")] 
public int Age { get; set; } 
} public class Test 

public static void Main() 

Student st = new Student(); 
string name = (有什么方法,可以通过 "st.Name"这个变量来获得它的自定义属性"Student.Name"????) Console.WriteLine(name); 
Console.Read(); 

}

解决方案 »

  1.   

    Type t = st.GetType();
    至于之后取属性,然后取特性我相信你已经会了,不会的话那你就是根本不会用反射
      

  2.   

    你的意思是? t.GetProperty("Name") 
    t.GetProperty("Age")吗? 我不想用字符串来读这个属性 我想用 st.Name 变量点出来的这个属性是否可以返回它的自定义属性?
      

  3.   

    st.Name
    这个东西取的是Name里面的值,你想通过值来找属性的信息,那是不可能的,就好像箱子里放着苹果,你想通过苹果来取得箱子的信息,那根本就不可能。你只能通过类来找属性,就好像是你只能通过架子来找箱子,但是不能通过箱子里的苹果来找箱子。
      

  4.   


    PropertyInfo info;//循环取得的属性
    object[] objs = info.GetCustomAttributes(typeof(ColumNameAttribute), false);
      

  5.   

    楼上你的代码编译不过去啊, PropertyInfo info;//循环取得的属性  你是要如何循环啊
      

  6.   

    我当然知道属性取得的值就是字段的值,所以我才问有没有好的办法我试过判断字段的内存地址 ,但是只有string 的匹对出来,int的就不行了
      

  7.   

    Type.GetProperties()!都知道了GetProperty了,旁边的函数不会看看啊!
      

  8.   

    Student st = new Student { id = 1, name = "shen" };
                System.Reflection.PropertyInfo[] pro = typeof(Student).GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);            string value = pro.First(c => c.Name == "Name").GetValue(st, null).ToString();
      

  9.   


    这个跟你调用不调用LINQ没有关系,我就是不想出现"NAME", 如果我在突然改了属性名称用"Name"根本不好找
      

  10.   


    你更搞笑,你自己试了吗? PropertyInfo info;//循环取得的属性
    object[] objs = info.GetCustomAttributes(typeof(ColumNameAttribute), false);循环取得的属性? 你怎么知道我要的是哪个属性? 我要问的就是如何找到对应的属性。还不如楼上说的,考点谱
      

  11.   


    new 出一个对象和为里面的字段赋值 会需要占用内存空间和内存地址。我用st.Name 这个属性的内存地址 和 反射出来的 GetValue(st, null)的内存地址 做比较奇怪的是我可以匹对出所有的 string 型很准确的找出来,  但是 INT  型的就找不到所以我才想问一下, 有什么好的办法, 你说的这个其实我 刚开始我是这么想的 我也觉得不可能 
      

  12.   

    你不就是要用自定义特性,检索出,对应的特性么    class Program
        {
            static void Main(string[] args)
            {
                Student st = new Student();  
                Type t = st.GetType();
                foreach (var item in t.GetProperties())
                {
                    object[] objs = item.GetCustomAttributes(typeof(ColumNameAttribute), false);
                    if (objs.Length > 0)
                    {
                        Console.WriteLine(string.Format("{0} cusName:{1}", item.Name, (objs[0] as ColumNameAttribute).ColumName));
                    }
                }
                Console.ReadKey();
            }
        }
    输出:
    Name cusName:Student.Name
    Age cusName:Student.Age
    要不就是我语文太差,理解错了?
      

  13.   

    谢谢楼上的代码,辛苦你了。string name = (有什么方法,可以通过 "st.Name"这个变量来获得它的自定义属性"Student.Name"????)  就是要用到st.Name 这个属性比如private string GetName(object obj)
    {
       .....
    retrun   自定义属性ColumName ;
    }调用的时候 string ColumName =  GetName(st.Name);就是指定了变量属性返回 对应的自定义属性ColumName 请问您上面的代码 我如何把st.Name 给他?不过还是谢谢了