加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-3 – 为什么WebGrid在格式化中使用动态?

发布时间:2020-12-16 03:52:04 所属栏目:asp.Net 来源:网络整理
导读:我正在使用ASP.NET MVC 3 Razor项目中的System.Web.Helpers.WebGrid,我无法理解为什么WebGridColumn的format参数是Func dynamic,object. 如果我创建这样的列… grid.Column( format: x = string.Format("{0:d}",x.StartDate) ); …我没有在StartDate属性上获
我正在使用ASP.NET MVC 3 Razor项目中的System.Web.Helpers.WebGrid,我无法理解为什么WebGridColumn的format参数是Func< dynamic,object>.

如果我创建这样的列…

grid.Column(
    format: x => string.Format("{0:d}",x.StartDate)
    );

…我没有在StartDate属性上获得强大的输入.如果我试着像这样绕过它……

grid.Column(
    format: (MyObjectType x) => string.Format("{0:d}",x.StartDate)
    );

…我在运行时被告知我的lambda无法转换为Func< dynamic,object>.有什么方法可以在这里使用非动态lambda吗?即使它只是< object,object>?

(我在.NET 4.0中,Func< in T,out TResult>应该是T的逆变,但我对协方差和逆变与动态如何一起工作感到困惑.)

解决方法

就类型系统而言,动态与对象相同.

它们不能使用强类型委托,因为它们没有要传递的强类型值.

在WebGrid中,他们从PropertyDescriptor获取一个Object,并将其传递给您的委托.

协方差在这里没有用;有Func< YourType,string>可以转换为Func< object,string>,可以用任何其他类型调用它并获得无效的强制转换.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读