【问题标题】:Lambda expression will not compileLambda 表达式不会编译
【发布时间】:2010-04-05 16:47:14
【问题描述】:

我很困惑。

我有这个 lambda 表达式:

tvPatientPrecriptionsEntities.Sort((p1, p2) =>
    p1.MedicationStartDate
      .Value
      .CompareTo(p2.MedicationStartDate.Value));

Visual Studio 不会编译它并抱怨语法。

我将lamba表达式转换为匿名委托:

tvPatientPrecriptionsEntities.Sort(
  delegate(PatientPrecriptionsEntity p1, PatientPrecriptionsEntity p2) 
  {
      return p1.MedicationStartDate
               .Value
               .CompareTo(p2.MedicationStartDate.Value);
  });

而且效果很好。

该项目使用 .NET 3.5,我参考了System.Linq

【问题讨论】:

  • 你收到了什么错误信息?
  • 对我来说似乎编译得很好。 tvPatientPrecriptionsEntities 是什么类型? (假设 p1.MedicationStartDate 是可以为空的日期时间是否正确?(“DateTime?”即)

标签: c# lambda


【解决方案1】:

DateTime.CompareTo 已重载。尝试在 lambda 中使用显式参数类型:

(DateTime p1, DateTime p2) => ...

【讨论】:

  • 啊,没有仔细阅读第二个示例。无论如何,如果 PatientPrecriptionsEntity.CompareTo 被重载,同样的注释也适用。
【解决方案2】:

以下代码对我来说编译得很好。也许您应该缩小代码之间存在的显着差异,并通过这个简单的示例确定问题的根源。

static void Main(string[] args)
{
   PatientPrescriptionsEntity[] ppe = new PatientPrescriptionsEntity[] {};
   Array.Sort<PatientPrescriptionsEntity>(ppe, (p1, p2) => 
       p1.MedicationStartDate.Value.CompareTo(p2.MedicationStartDate.Value));
}
...
class PatientPrescriptionsEntity
{
   public DateTime? MedicationStartDate;
}

【讨论】:

    猜你喜欢
    • 2017-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-30
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多