【发布时间】:2016-01-12 06:57:14
【问题描述】:
我正在使用 .NET4.5 和 C# 我想创建扩展方法,允许我传递对象的属性,如果该对象的 Id 为 0,则 return null 否则返回该属性值。
我可以通过反思来解决问题,因此请考虑更多的训练练习,而不是我试图解决实际问题。
当前扩展方法位于static 类中,如下所示:
public static object GetNullIfNotSet(this WillAnswer answer, Expression<Func<WillAnswer>> expression)
{
if (answer.Id == 0) return null;
return expression.Compile()();
}
我希望能够使用它的方式如下(答案类型为WillAnswer):
var emptyIfNewObject = answer.GetNullIfNotSet(o => o.HasBusinessAssets)
但是它给了我编译错误:
错误 1 委托 'System.Func' 不占用 1 参数 C:\hg\Website\Areas\Wills\ViewModel\Answers.cs 38 59 网站
这让我皱起了眉头,因为我认为我没有传递任何论据(是吗?)。能否请比我聪明的人解释一下我的哪些期望是错误的。
以防万一我不清楚,我会重申。 我想要的是能够打电话
如果Id 的answer 是0,则var emptyIfNewObject = answer.GetNullIfNotSet(o => o.HasBusinessAssets) 并得到null。
【问题讨论】:
-
正如其他人指出的那样,您不需要表达式。你的错误的根源是你定义你的 func 错误的事实。您可能想要 Func
-
这样称呼它:
answer.GetNullIfNotSet(() => (((Func<WillAnswer>)(() => answer.HasBusinessAssets))()));真是一团糟!回到haim770的答案:-) -
如果您在调用方法时有权访问要访问其属性的对象,因为它是对象本身的扩展,那么为什么不只传递属性而不是传递
Func?
标签: c# lambda expression .net-4.5 extension-methods