C#无法从lambda表达式获取值

时间:2013-09-16 17:43:37

标签: c# lambda

我们公司购买了一个用.NET编写的应用程序,我很荣幸能够支持它。我从未使用过.NET,因此我需要一些如何使用lambda的指导。

在我的cshtml文件中,我试图获取一个值并验证它是否 NULL

我试图这样做

var appointment = x => x.AppointmentDate;

我收到编译器错误“无法将lambda表达式分配给隐式类型的局部变量”。我用Google搜索了错误并尝试了以下内容。

Func<DateTime, DateTime> appointment = x => x.AppointmentDate;

然而现在编译器给出了这个错误“'System.DateTime'不包含'AppointmentDate'的定义,并且没有可以找到接受类型'System.DateTime'的第一个参数的扩展方法'AppointmentDate'(是你错过了using指令或程序集引用吗?)

如何从lambda获取验证值?

1 个答案:

答案 0 :(得分:7)

我认为你对Func<T, TResult>的意图感到困惑。第一个参数(T)是委托的输入; TResult是输出。所以你可能想要:

Func<Appointment, DateTime> appointmentFunction = x => x.AppointmentDate;

...其中Appointment是您正在使用的对象的类型。

当然,这不会检查值是否为null - 实际上如果AppointmentDate属性只是DateTime那么它就不能为null,因为DateTime是一个不可为空的值类型。

请注意,在许多情况下,您不需要将lambda表达式分配给局部变量 - 如果您正在调用泛型方法,则通常可以让类型推断为您计算类型。例如,如果您有List<Appointment>,则可以使用:

var sorted = appointments.OrderBy(x => x.AppointmentDate);

和类型推断将计算出您感兴趣的委托类型。

我建议有条不紊地学习C#,而不是仅仅通过更改现有应用程序来学习它。如果你不小心,你很容易陷入坏习惯 - 并且误解基本语言概念。