2013-05-16 40 views
0

在這裏用MVC打破我的頭。還挺好奇的動態類型在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

在這個問題上,你可以瞭解三種類型: [鏈接](http://stackoverflow.com/questions/961581/whats-the-difference-between-dynamicc-4-and-var) –

回答

2

var model = new AboutModel是一個隱含類型的變量,因爲您不必事先指定變量的類型,編譯器可以通過=後面的內容來推斷它。 (在這種情況下AboutModel

如果使用implicityly類型的變量,你必須給它一個值,例如:

var model = new AboutModel; 

將編譯,但

var model; 

不會。

AboutModel model = new AboutModel指定變量聲明中的類型,如果您在同一行中給它一個值,那麼您並不需要這麼做。如果你給它一個聲明類型,你不需要給它一個值。例如:

AboutModel model; 

會編譯。

dynamic關鍵字意味着它不會在編譯時進行類型檢查,在這種情況下也不會有任何區別。

+0

簡要和重點。 –

0

不,所有三種情況下的運行時間類型爲MvcApp.Models.AboutModel

在前兩種情況下,您按照原樣和最後一種情況傳遞類型,將其作爲動態傳遞,將嘗試將其轉換爲@model指令定義的視圖類型。

除非您需要「動態性」(在這種情況下,您希望將@model類型設置爲dynamic),否則爲了清晰起見,我會堅持強類型初始化之一。