我们公司购买了一个用.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获取验证值?
答案 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#,而不是仅仅通过更改现有应用程序来学习它。如果你不小心,你很容易陷入坏习惯 - 并且误解基本语言概念。