2012-06-18 23 views
6

我有一個CSHTML剃刀頁面下面的代碼:當值來自ViewBag時,爲什麼字符串上的switch語句失敗?

@{ 
    var sort = ViewBag.Sort.ToString(); 
    switch (sort) 
    { 
     case "None": Html.Action("SortNone"); break; 
     case "Name": Html.Action("SortName"); break; 
     case "Date": Html.Action("SortDate"); break; 
    } 
} 

然而,這是一個編譯器錯誤信息失敗:

CS0151: A switch expression or case label must be a bool, char, string, integral, enum, or corresponding nullable type 

但排序是一個字符串!將其重寫爲一系列if/else語句,但不夠高雅。

回答

9

嘗試投射,編譯器不知道ToString()的返回類型,因爲它是動態的。

var sort = (string)ViewBag.Sort.ToString(); 
+1

好的,這使得我所知道的一切都沒有意義......但它的工作原理!我會進入一個哲學討論,爲什麼ToString()不只是返回一個字符串,但我可能不需要知道... –

+0

因爲它是動態的,方法將在運行時綁定,不存在任何停止ToString的新實現的東西都會返回字符串以外的內容。你可以使用這個((對象)ViewBag.Sort).ToString() –

+0

當然!感謝您的解釋和快速回復。 –

相關問題