读书人

怎么获取类中属性的名称

发布时间: 2012-06-16 20:34:32 作者: rapoo

如何获取类中属性的名称
比如现在有一个类如下:

C# code
class Item {    public GUID Id { get; set; }    public string Name { get; set; }}

有什么办法可以在调用的时候获取类中属性的名称如:
C# code
Item item = new Item();

如何做到通过 item.Name 得到 "Name" 字符串

[解决办法]
C# code
string name = typeof(Item).GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance)[1].Name;
[解决办法]
将item封装成类,里面发布Name属性
[解决办法]
C# code
public string GetPropertyName(Expression<Func<Item, string>> expr)        {            var name = ((MemberExpression)expr.Body).Member.Name;            return name;        }string name = GetPropertyName(o=>o.Name);
[解决办法]
探讨
引用:

引用:
引用:

C# code
string name = typeof(Item).GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance)[1].Name;

请问我如何指定获取呢 您这代……

[解决办法]
我想,反射是一个从外向内的窥探工具,而你的要求是从内向外反馈任意一个属性的名称,所以直接使用反射可能没法实现。

另一方面,EF使用Original与Current维护一个实体的变化情况,还有EntityKey对象和StateManager帮助,要我们操心的并不多。你去控制一个实体的某几个属性是否更新,是不是有点画蛇添足了?

一点拙见,仅供参考。
[解决办法]
我搞错了,用泛型吧,无意中发现调用的地方居然可以不用写类型?奇怪

C# code
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Linq.Expressions;namespace ConsoleApplication1{    class Program    {        static void Main(string[] args)        {            string name = GetPropertyName(o => o.Name);            Console.WriteLine(name);            string id = GetPropertyName(o => o.Id);            Console.WriteLine(id);            Console.ReadKey();        }        public static string GetPropertyName<T>(Expression<Func<Item, T>> expr)        {            var name = ((MemberExpression)expr.Body).Member.Name;            return name;        }    }    class Item    {        public int Id { get; set; }        public string Name { get; set; }    }} 

读书人网 >C#

热点推荐