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

sva*_*ger 0 c# lambda

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

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

我试过这样做

var appointment = x => x.AppointmentDate;
Run Code Online (Sandbox Code Playgroud)

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

Func<DateTime, DateTime> appointment = x => x.AppointmentDate;
Run Code Online (Sandbox Code Playgroud)

但是现在编译器给出了这个错误" 'System.DateTime'不包含'AppointmentDate'的定义,并且没有可以找到接受类型'System.DateTime'的第一个参数的扩展方法'AppointmentDate'(你是否缺少using指令或装配参考?) "

如何从lambda获取验证值?

Jon*_*eet 7

我觉得你很沮丧的意思Func<T, TResult>是什么.第一个参数(T)是委托的输入 ; TResult是输出.所以你可能想要:

Func<Appointment, DateTime> appointmentFunction = x => x.AppointmentDate;
Run Code Online (Sandbox Code Playgroud)

... Appointment您正在使用的对象的类型在哪里.

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

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

var sorted = appointments.OrderBy(x => x.AppointmentDate);
Run Code Online (Sandbox Code Playgroud)

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

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