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

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. php_sapi_name详解

    php_sapi_name : — 返回 web 服务器和 PHP 之间的接口类型. 返回描述 PHP 所使用的接口类型(the Server API, SAPI)的小写字符串. 例如,CLI 的 P ...

  2. [Tex学习]WinEdit 常用软件快捷键

    WinEdit 常用软件快捷键 编辑: Alt+C:在剪贴板原有复制文本后增加新的被选择的文本. Ctrl+Shift+Alt+Right/Left:对选中文本增加或者删除Comment标记. Ctr ...

  3. angularjs的touch事件

    angularJs没有touch事件.这里提供一个touch指令. ngTouch.js "use strict"; angular.module("ngTouch&qu ...

  4. c#lock语句及在单例模式中应用

    C#中的lock语句是怎么回事,有什么作用? C#中的lock语句将lock中的语句块视为临界区,让多线程访问临界区代码时,必须顺序访问.他的作用是在多线程环境下,确保临界区中的对象只被一个线程操作, ...

  5. IIS与Apache同时使用80端口

    如果我们在一台服务器即使用IIS作为WEB服务器,同时又想使用Apache作为WEB服务器,那么如何来公用80端口呢? 我们可以使用单IP地址来实现,但是在性能上有损失: 将apache设为使用80端 ...

  6. Farey Sequence

    Description The Farey Sequence Fn for any integer n with n >= 2 is the set of irreducible rationa ...

  7. maven部署tomcat项目,403错误解决

    maven部署tomcat项目时403错误的解决方法 web模块的pom文件 pom.xml <plugin> <groupId>org.apache.tomcat.maven ...

  8. (转)winform Form 淡入淡出效果

    原文地址:http://blog.csdn.net/a237428367/article/details/5933565 using System.Runtime.InteropServices; p ...

  9. Django model 中meta options

    之前学了abstract,这是后续的一些options app_label: app_label的作用是:如果一个model定义不在INSTALLED_APPS中,那么此时就需要声明,这个model的 ...

  10. Git服务器、http协议及XCode

    本来费了老鼻子牛劲搭好了SVN,可以通过web进行访问,也弄好了eclipse和XCode,结果几个开发的同事说要上git,悲了个催,又开始折腾git. 因为公司只有一个公网的http出口,因此开始了 ...