在这里用MVC破解我的头脑。
我把我的模型写成:
public class AboutModel
{
public string AboutText { get; set; }
}
和我的控制器:
public ActionResult About()
{
var model = new AboutModel { AboutText = "We build better software."};
return View(model);
}
并将new
行更改为:
AboutModel model = new AboutModel { AboutText = "We build better software."}
最后到:
dynamic model = new AboutModel { AboutText = "We build better software."}
似乎一切都与我的View
完美配合:
@model MvcApp.Models.AboutModel
<p>@if (Model != null)
{
@Model.AboutText
}</p>
我的3个模型初始化有什么不同吗?
答案 0 :(得分:2)
var model = new AboutModel
是一个隐式类型变量,因为您不必事先指定变量的类型,编译器可以通过=后面的内容来推断它。 (在这种情况下为AboutModel
)
如果使用一个隐式类型变量,则必须为其赋值,例如:
var model = new AboutModel;
将编译,但
var model;
不会。
AboutModel model = new AboutModel
指定变量声明中的类型,如果你在同一行中给它一个值,那么你真的不需要这样做。如果你在声明上给它一个类型,你不需要给它一个值。例如:
AboutModel model;
将编译。
dynamic
关键字意味着它不会在编译时进行类型检查,在这种情况下也不会有任何区别。
答案 1 :(得分:0)
不,所有三种情况下的运行时类型都是MvcApp.Models.AboutModel
。
在前两种情况下,您按原样传递类型,在最后一种情况下,将其作为动态传递,将尝试将其强制转换为@model
指令定义的视图类型。
为了清晰起见,我会坚持使用其中一种强类型初始化,除非您需要“动态性”(在这种情况下,您也希望将@model
类型设置为dynamic
)。