簡體   English   中英

為什么這個string.Format()沒有返回字符串,而是動態的?

[英]Why doesn't this string.Format() return string, but dynamic?

@{
    ViewBag.Username = "Charlie Brown";
    string title1 = string.Format("Welcome {0}", ViewBag.Username);
    var title2 = string.Format("Welcome {0}", ViewBag.Username);
}

在MVC視圖中,我使用如下值:

@Html.ActionLink(title1, "Index")
@Html.ActionLink(title2, "Index")

這里, title1工作正常。 但是title2 ActionLink因編譯錯誤而失敗:

CS1973:'System.Web.Mvc.HtmlHelper'沒有名為'StandardHeader'的適用方法,但似乎有一個名稱的擴展方法。 無法動態分派擴展方法。 考慮轉換動態參數或調用擴展方法而不使用擴展方法語法。

string.Format()有很多重載,但返回類型總是字符串 為什么使用var的變量聲明在這里失敗?

好的,所以我們已經從評論和其他答案中知道問題是dynamic 由於dynamic在運行時綁定的,因此只有在那時才進行重載解析和類型驗證。

因此:如果至少有一個參數是dynamic ,則重載決策是在運行時完成的。

這就是為什么允許這個明顯的錯誤:

dynamic x = "";
int i = string.Format("{0}", x);

如果沒有返回intstring.Format重載,則不會打擾。 它稍后評估。

錯誤消息告訴您這里到底出了什么問題:

無法動態分派擴展方法。 考慮轉換動態參數或調用擴展方法而不使用擴展方法語法。

title2屬於dynamic類型。 你需要將它轉換為string ,因為你知道它是什么。

它是動態的視圖包。 在此輸入圖像描述

如果您使用實際的用戶名(而不是ViewBag.UserName),它將起作用。 或者將(string)ViewBag.Username轉換為字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM