哪些 Nullable<> 类型不允许作为 System.Web.Mvc.ViewPage<TModel> 泛型的 TModel 参数传递的可能原因是什么?这有时会很方便。
在 ASP.NET MVC 源代码中定义了 TModel 应该是一个类:
public class ViewPage<TModel> : ViewPage where TModel : class
但可空类型是值类型。也许定义可以不那么严格......
哪些 Nullable<> 类型不允许作为 System.Web.Mvc.ViewPage<TModel> 泛型的 TModel 参数传递的可能原因是什么?这有时会很方便。
在 ASP.NET MVC 源代码中定义了 TModel 应该是一个类:
public class ViewPage<TModel> : ViewPage where TModel : class
但可空类型是值类型。也许定义可以不那么严格......
目前这样做是没有意义的,因为 ViewPage<T> 在内部总是验证模型是 T 的实例。由于此检查,您永远无法传递 null 。
至于为什么首先不允许结构类型,有很多原因。其中:(a)它可能会鼓励人们为模型使用自定义结构类型,这几乎不是正确的做法;(b) 不能将结构类型作为参数传递给 Controller.UpdateModel();(c) 模型应该具有引用相等性,以便过滤器可以检查和修改它们;(d) int 等内置结构类型通常不能单独用作模型对象;(e) 结构类型不支持继承,例如将 int 模型传递给 ViewPage<long> 会崩溃。
事实证明,(c)可能不是问题,因为结构类型应该是不可变的,但其他项目要求在支持结构类型之前给予充分的考虑和设计决策。支持这些的后果远远大于仅仅消除对 ViewPage<T> 的约束。
单个值并不是真正的“模型”-您可以只使用字典并进行转换吗?