0

在这里用 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 个模型初始化有什么不同吗?

4

2 回答 2

2

var model = new AboutModel是一个隐式类型变量,因为您不必事先指定变量的类型,编译器可以通过 = 之后的内容推断它。(在这种情况下AboutModel

如果你使用隐式类型变量,你必须给它一个值,例如:

var model = new AboutModel;

会编译,但是

var model;

惯于。

AboutModel model = new AboutModel在变量声明中指定类型,如果您在同一行中给它一个值,您实际上不需要这样做。如果你在声明时给它一个类型,你不需要给它一个值。例如:

AboutModel model;

将编译。

dynamic关键字意味着它不会在编译时进行类型检查,在这种情况下也不会有任何区别。

于 2013-05-16T21:46:16.723 回答
0

不,所有三种情况下的运行时类型都是MvcApp.Models.AboutModel.

在前两种情况下,您按原样传递类型,在最后一种情况下,将其作为动态传递,将尝试将其转换为@model指令定义的视图类型。

为了清楚起见,我会坚持使用强类型初始化之一,除非您需要“动态性”(在这种情况下,您也希望将@model类型设置为dynamic)。

于 2013-05-16T21:44:39.560 回答