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