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();
}
}
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();
}
}
至于之后取属性,然后取特性我相信你已经会了,不会的话那你就是根本不会用反射
t.GetProperty("Age")吗? 我不想用字符串来读这个属性 我想用 st.Name 变量点出来的这个属性是否可以返回它的自定义属性?
这个东西取的是Name里面的值,你想通过值来找属性的信息,那是不可能的,就好像箱子里放着苹果,你想通过苹果来取得箱子的信息,那根本就不可能。你只能通过类来找属性,就好像是你只能通过架子来找箱子,但是不能通过箱子里的苹果来找箱子。
PropertyInfo info;//循环取得的属性
object[] objs = info.GetCustomAttributes(typeof(ColumNameAttribute), false);
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();
这个跟你调用不调用LINQ没有关系,我就是不想出现"NAME", 如果我在突然改了属性名称用"Name"根本不好找
你更搞笑,你自己试了吗? PropertyInfo info;//循环取得的属性
object[] objs = info.GetCustomAttributes(typeof(ColumNameAttribute), false);循环取得的属性? 你怎么知道我要的是哪个属性? 我要问的就是如何找到对应的属性。还不如楼上说的,考点谱
new 出一个对象和为里面的字段赋值 会需要占用内存空间和内存地址。我用st.Name 这个属性的内存地址 和 反射出来的 GetValue(st, null)的内存地址 做比较奇怪的是我可以匹对出所有的 string 型很准确的找出来, 但是 INT 型的就找不到所以我才想问一下, 有什么好的办法, 你说的这个其实我 刚开始我是这么想的 我也觉得不可能
{
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要不就是我语文太差,理解错了?
{
.....
retrun 自定义属性ColumName ;
}调用的时候 string ColumName = GetName(st.Name);就是指定了变量属性返回 对应的自定义属性ColumName 请问您上面的代码 我如何把st.Name 给他?不过还是谢谢了