[英]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);
如果沒有返回int
的string.Format
重載,則不會打擾。 它稍后評估。
錯誤消息告訴您這里到底出了什么問題:
無法動態分派擴展方法。 考慮轉換動態參數或調用擴展方法而不使用擴展方法語法。
title2
屬於dynamic
類型。 你需要將它轉換為string
,因為你知道它是什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.