【问题标题】:Lambda expressions automated packingLambda 表达式自动打包
【发布时间】:2010-07-22 08:19:04
【问题描述】:
public void aMethod<T>(Expression<Func<T, object>> lambda)
{
    ......
}

aMethod<User>(x=> x.UserId)

User是我的自定义类,他的UserId int类型的成员...

我想要 lambda 表达式 x => x.UserId

但顺便说一句,我得到的是 x => Convert (x.UserId) 因此,下面的操作不能,我需要确保我的表达式类型Expression &lt;Func &lt;T, object&gt;&gt;没有定义为Expression &lt;Func &lt;T, int&gt;&gt;

有什么办法吗?

【问题讨论】:

    标签: c# lambda


    【解决方案1】:
    public void aMethod<T,TMember>(Expression<Func<T, TMember>> lambda)
    {
        ......
    }
    
    aMethod<User>(x=> x.UserId)
    

    object 是一个引用类型。 int 值类型。 如果你得到一个 int 作为对象,它必须被打包:-)

    【讨论】:

    • 怎么写?在方法体中
    • 很难,如果你只写部分英文句子......那么,你想知道方法的主体应该是什么吗?那么请解释一下它应该做什么......
    • = =!... 因为我有很多代码是基于aMethod(xxxx)来写的,如果要改变技术会耗费很多时间。那么没有别的办法了吗?
    • 由于第二个参数明确是一个对象,我认为没有机会。但是当您更改方法并重新编译项目时,我认为您不需要更改任何内容。因为它们是兼容的(但你需要重新编译)
    • 如你所见,因为我的代码有很多层,其实就是数据访问层,导致上面的代码稍有改动,差点就得走了。那么大家可以谈谈其他方法吗?
    猜你喜欢
    • 2014-09-19
    • 2014-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    相关资源
    最近更新 更多