gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:36:58 26 4
gpt4 key购买 nike

我正在使用 System.Web.Helpers.WebGrid在 ASP.NET MVC 3 Razor 项目中,我无法理解为什么 WebGridColumn 的格式参数是 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 上是逆变的,但我对协方差和逆变如何与动态一起工作感到困惑。)

最佳答案

就类型系统而言,dynamicobject 相同.

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

内部 WebGrid ,他们得到一个 Object来自 PropertyDescriptor ,并将其传递给您的代表。

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

关于asp.net-mvc-3 - 为什么 WebGrid 在格式化时使用动态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5901874/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com