Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 可为空<&燃气轮机;作为ViewPage的TModel_C#_Asp.net Mvc_Viewmodel_Nullable_Reference Type - Fatal编程技术网

C# 可为空<&燃气轮机;作为ViewPage的TModel

C# 可为空<&燃气轮机;作为ViewPage的TModel,c#,asp.net-mvc,viewmodel,nullable,reference-type,C#,Asp.net Mvc,Viewmodel,Nullable,Reference Type,哪些可能的原因是哪些可空类型不允许作为System.Web.Mvc.ViewPage generic的TModel参数传递?这有时可能很方便 在ASP.NET MVC源代码中定义了什么TModel应该是一个类: public class ViewPage<TModel> : ViewPage where TModel : class public class ViewPage:ViewPage,其中TModel:class 但可空类型是值类型。也许定义可以不那么严格…一个值不是真

哪些可能的原因是哪些可空类型不允许作为System.Web.Mvc.ViewPage generic的TModel参数传递?这有时可能很方便

在ASP.NET MVC源代码中定义了什么TModel应该是一个类:

public class ViewPage<TModel> : ViewPage where TModel : class
public class ViewPage:ViewPage,其中TModel:class

但可空类型是值类型。也许定义可以不那么严格…

一个值不是真正的“模型”-你可以使用字典并强制转换?

一个值不是真正的“模型”-你可以使用字典并强制转换?

目前这样做没有意义,由于ViewPage内部始终验证模型是否为T的实例,因此您永远无法通过null检查

至于为什么最初不允许使用结构类型,原因有很多。其中包括:(a)它可能鼓励人们为模型使用自定义结构类型,这几乎从来都不是正确的做法;(b) 不能将结构类型作为参数传递给Controller.UpdateModel();(c) 模型应具有参考等式,以便过滤器能够检查和修改它们;(d) 内置结构类型(如int等)本身通常不可用作模型对象;(e)结构类型不支持继承,例如,将int模型传递到ViewPage会导致崩溃


事实证明,(c)可能不是问题,因为结构类型应该是不可变的,但其他项目要求在支持结构类型之前,允许结构类型得到充分的考虑和设计决策。支持这些操作的后果远远大于仅仅删除ViewPage上的约束。

这在目前是没有意义的,因为ViewPage内部总是验证模型是否是t的实例。由于此检查,您永远无法传递null

至于为什么最初不允许使用结构类型,原因有很多。其中包括:(a)它可能鼓励人们为模型使用自定义结构类型,这几乎从来都不是正确的做法;(b) 不能将结构类型作为参数传递给Controller.UpdateModel();(c) 模型应具有参考等式,以便过滤器能够检查和修改它们;(d) 内置结构类型(如int等)本身通常不可用作模型对象;(e)结构类型不支持继承,例如,将int模型传递到ViewPage会导致崩溃

事实证明,(c)可能不是问题,因为结构类型应该是不可变的,但其他项目要求在支持结构类型之前,允许结构类型得到充分的考虑和设计决策。支持这些功能的后果远远大于仅删除ViewPage上的约束