如何获取类中属性的名称
比如现在有一个类如下:
- 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);
[解决办法]
[解决办法]
我想,反射是一个从外向内的窥探工具,而你的要求是从内向外反馈任意一个属性的名称,所以直接使用反射可能没法实现。
另一方面,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; } }}