public class User
{
public string name { get; set; }
public string gender { get; set; }
public string age { get; set; }
}
User u=new User();
//如何通过u.name这个属性得到"name"
你在get里面return "name"不就行了!~
不是这个意思,我需要得到属性的名字,不是它的值。
typeof(User).GetProperties();到是可以得到属性列表,通过循环得到属性名,想知道有办法简单的得到一个属性的名吗
反射
使用反射:大概是这样.
User user=new User();
Type type=user.GetType();
然后你type. 看看有什么方法吧!
除了反射再遍历typeof(User).GetProperties()没有其他办法
typeof() 里面可以加user么 ?? 只能 user.GetProperties()
user.GetType().GetProperties();
序列化就行了
你是指像linq那样的可以在运行的时候获得编码时使用的各种名字吧。很遗憾的告诉你,那种功能其实是个语法糖,在运行时做不到。
反射,顶.!!
class Test { static void Main() { User entity = new User(); PropertyInfo[] pi = entity.GetType().GetProperties(); foreach (PropertyInfo info in pi) { if (info.Name.ToString() == "name") { Console.WriteLine(info.Name.ToString()); } } } } public class User { public string name { get; set; } public string gender { get; set; } public string age { get; set; } }
楼上是正解
public static class ExtensionMethods { public static string GetPropertyName<T>(this object obj, Expression<Func<T>> propertyExpression) { if (propertyExpression == null) { throw new ArgumentNullException("propertyExpression"); } MemberExpression body = propertyExpression.Body as MemberExpression; if (body == null) { throw new ArgumentException("Invalid argument", "propertyExpression"); } PropertyInfo property = body.Member as PropertyInfo; if (property == null) { throw new ArgumentException("Argument is not a property", "propertyExpression"); } return property.Name; } } //方法调用 Product p = new Product(); Console.WriteLine(p.GetPropertyName(() => p.ID));