感谢下面这篇博文给我的思路:

http://www.cnblogs.com/daimage/archive/2012/04/10/2440186.html

上面文章的博主给出的代码是可用的,但是调用方法时需要写的代码过于冗长,例如博主给出的示例代码

var name = TypeInfoHelper.GetClassPropertiesName<MyClass,List<string>>(s => myClass.UserName);

代码中的List<string>为MyClass.UserName属性的类型,如果要获取一个类型为int的Flag属性还得相应的改为下面这个样子

var name = TypeInfoHelper.GetClassPropertiesName<MyClass,int>(s => customer.Flag);

我想把其中的传入泛型参数的代码拿掉,变成这样子:

TypeInfoHelper.GetPropertyName(s=>myClass.UserName)

是不是变得非常简洁?下面即是全部代码,再次感谢代码哥,致敬!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text; namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var cust = new Customer();
var addr = new Address(cust);
string name1 = TypeInfoHelper.GetPropertyName(p => cust.Flag);
Console.WriteLine(name1);
string name2 = TypeInfoHelper.GetPropertyName(p => addr.Owner.Remark);
Console.WriteLine(name2);
string name3 = TypeInfoHelper.GetPropertyName(p => cust.Orders);
Console.WriteLine(name3);
string name4 = TypeInfoHelper.GetPropertyName(p => cust.Orders.FirstOrDefault().Price);
Console.WriteLine(name4);
Console.ReadLine();
}
} public class TypeInfoHelper
{
public static string GetPropertyName(Expression<Func<Object, Object>> propery)
{
var body = propery.Body.ToString();
return body.Substring(body.LastIndexOf(".") + );
} } public class Customer
{
public string Name { get; set; }
public string Remark { get; set; }
public int Flag { get; set; } public List<string> Contacts { get; set; }
public List<Order> Orders { get; set; }
} public class Order
{
public decimal Price { get; set; }
} public class Address
{
private Customer customer; public string Country { get; set; }
public string State { get; set; }
public string Street { get; set; } public Customer Owner
{
get { return customer; }
} public Address(Customer owner)
{
this.customer = owner;
}
} }

利用Lambda获取属性名称的更多相关文章

  1. js 获取属性名称,再根据这个属性名获取值

    if (result.success) { var obj = JSON.parse(result.data); var sltObj = document.getElementById(" ...

  2. js 获取属性名称

    $(function ()        {            myfun();        })        function myfun()        {            var ...

  3. 利用Lambda获取类中属性名称

    public class TypeInfoHelper { public static string GetPropertyName<T>(Expression<Func<T, ...

  4. 利用Java反射根据类的名称获取属性信息和父类的属性信息

    代码: import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Arrays; import java ...

  5. C#通过属性名称获取(读取)属性值的方法

    之前在开发一个程序,希望能够通过属性名称读取出属性值,但是由于那时候不熟悉反射,所以并没有找到合适的方法,做了不少的重复性工作啊! 然后今天我再上网找了找,被我找到了,跟大家分享一下. 其实原理并不复 ...

  6. 定义通用的可通过lambda表达式树来获取属性信息

    我们一般获取某个类型或对象的属性信息均采用以下几种方法: 一.通过类型来获取属性信息 var p= typeof(People).GetProperty("Age");//获取指定 ...

  7. .NET C#利用反射获取类文件以及其中的方法&属性 并获取类及方法上的特性

    了解C#特性类并声明我们自己的特性类[AttributeTest]代码如下 using System; namespace AttributeTest { /* 特性说明 特性本质是一个继承和使用了系 ...

  8. java利用反射获取类的属性及类型

    java利用反射获取类的属性及类型. import java.lang.reflect.Field; import java.math.BigDecimal; import java.util.Map ...

  9. JavaScript函数之实际参数对象(arguments) / callee属性 / caller属性 / 递归调用 / 获取函数名称的方法

    函数的作用域:调用对象 JavaScript中函数的主体是在局部作用域中执行的,该作用域不同于全局作用域.这个新的作用域是通过将调用对象添加到作用域链的头部而创建的(没怎么理解这句话,有理解的亲可以留 ...

随机推荐

  1. SQL 创建一个只读账户 .

    1.进入sqlserver management studio 2.选择安全性->登录名->右键新建登录名 3.在常规里输入用户名和密码 4.在"用户映射"里“映射到此 ...

  2. WCF JSON DATETIME JSON.NET (Newtonsoft.Json.dll)

    [DataMember] public DateTime? myTime { get; set; } var timeFormat = new JsonSerializerSettings() { D ...

  3. 必须使用“角色管理工具”安装或配置Microsoft .NET Framework 3.5 SP1

    在Windows Server 2008下直接安装SQL Server 2008时,会出现如下错误: 必须使用“角色管理工具”安装或配置Microsoft .NET Framework 3.5 SP1 ...

  4. Delphi制作DLL

    一.开使你的第一个DLL专案 1.File->Close all->File->New﹝DLL﹞ 代码: //自动产生Code如下 library Project2; //这有段废话 ...

  5. Win32API界面库 - Project wheels 工程基础部分完成

    离上次发博文过去了好久,先是要忙一个机器人的项目,然后就是部门的事情和考试周复习,然后就到了考试周,趁着复习的间隙,拾起了寒假时候抄的界面库,修掉了从前的bug. bug1 控件显示问题 当初抄这个库 ...

  6. Spark往Elasticsearch读写数据

    def main(args: Array[String]): Unit = { val sparkConf = new SparkConf().setAppName("DecisionTre ...

  7. [ActionScript 3.0] AS3.0 火焰效果

    package { import flash.display.Sprite; import flash.display.* import flash.events.Event; import flas ...

  8. TEST设置

  9. 【摘】top命令

    1.重要参数解释 VIRT:virtual memory usage.Virtual这个词很神,一般解释是:virtual adj.虚的, 实质的, [物]有效的, 事实上的.到底是虚的还是实的?让G ...

  10. 关掉apache2服务器日志文件

    磁盘空间突然满了,才发现是这个东西占空间.11个G的空间 修改:/etc/apache2/size-available/default <VirtualHost *:80>ServerNa ...