使用系统.c# Lambda表达式中的DateTime给出一个异常

本文关键字:异常 一个 DateTime 系统 Lambda 表达式 | 更新日期: 2023-09-27 18:15:05

我试图实现另一个问题中出现的建议:Stackoverflow问题

片段:

 public static class StatusExtensions
    {
        public static IHtmlString StatusBox<TModel>(
            this HtmlHelper<TModel> helper,
            Expression<Func<TModel, RowInfo>> ex
        )
        {
            var createdEx =
                Expression.Lambda<Func<TModel, DateTime>>(
                    Expression.Property(ex.Body, "Created"),
                    ex.Parameters
                );
            var modifiedEx =
                Expression.Lambda<Func<TModel, DateTime>>(
                    Expression.Property(ex.Body, "Modified"),
                    ex.Parameters
                );
            var a = "a" + helper.HiddenFor(createdEx) +
                helper.HiddenFor(modifiedEx);
            return new HtmlString(
                "Some things here ..." +
                helper.HiddenFor(createdEx) +
                helper.HiddenFor(modifiedEx)
            );
        }
    }

实现时,我得到以下异常,我真的不明白。异常指向以"var createdEx ="

开头的行
System.ArgumentException was unhandled by user code
  Message=Expression of type 'System.Nullable`1[System.DateTime]' cannot be used for return type 'System.DateTime'
  Source=System.Core
  StackTrace:

谁能帮助我,并建议我能做什么来解决这个异常?

使用系统.c# Lambda表达式中的DateTime给出一个异常

在类型后面添加问号的简写允许使用Nullable。你可能会想要改变这两个签名。请记住,这给了您传递null DateTimes作为隐藏参数的可能性,但这可能不是您想要的。您可能希望保留这段代码,并确保只向其传递非空的DateTime's。

 public static class StatusExtensions
    {
        public static IHtmlString StatusBox<TModel>(
            this HtmlHelper<TModel> helper,
            Expression<Func<TModel, RowInfo>> ex
        )
        {
            var createdEx =
                Expression.Lambda<Func<TModel, DateTime?>>(
                    Expression.Property(ex.Body, "Created"),
                    ex.Parameters
                );
            var modifiedEx =
                Expression.Lambda<Func<TModel, DateTime?>>(
                    Expression.Property(ex.Body, "Modified"),
                    ex.Parameters
                );
            var a = "a" + helper.HiddenFor(createdEx) +
                helper.HiddenFor(modifiedEx);
            return new HtmlString(
                "Some things here ..." +
                helper.HiddenFor(createdEx) +
                helper.HiddenFor(modifiedEx)
            );
        }
    }

允许lambda通过添加问号返回一个可空的日期时间:var createdEx = Expression.Lambda<Func<TModel, DateTime?>>...