0

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

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

我试过这样做

var appointment = x => x.AppointmentDate;

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

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

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

如何从 lambda 中获取要验证的值?

4

1 回答 1

7

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

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

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

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

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

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

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

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

于 2013-09-16T17:45:32.750 回答