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

本文关键字:获取 表达式 lambda | 更新日期: 2023-09-27 18:31:41

我们公司购买了一个用.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 获取要验证的值?

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

我想你对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#,而不是仅仅通过更改现有应用程序来学习它。如果你不小心,你很容易养成坏习惯 - 并误解基本的语言概念。