Bla*_*ise 12 .net c# asp.net-mvc
@{
ViewBag.Username = "Charlie Brown";
string title1 = string.Format("Welcome {0}", ViewBag.Username);
var title2 = string.Format("Welcome {0}", ViewBag.Username);
}
Run Code Online (Sandbox Code Playgroud)
在MVC视图中,我使用如下值:
@Html.ActionLink(title1, "Index")
@Html.ActionLink(title2, "Index")
Run Code Online (Sandbox Code Playgroud)
在这里,title1工作正常.但title2ActionLink因编译错误而失败:
CS1973:'System.Web.Mvc.HtmlHelper'没有名为'StandardHeader'的适用方法,但似乎有一个名称的扩展方法.无法动态分派扩展方法.考虑转换动态参数或调用扩展方法而不使用扩展方法语法.
string.Format()有很多重载,但返回类型总是字符串.为什么变量声明使用var失败?
Pat*_*man 16
好的,所以我们已经从评论和其他答案中知道了问题所在dynamic.由于dynamic绑定在运行时,只有在那个时候是重载解析和类型验证完成.
所以:如果至少有一个参数是dynamic,那么重载决议是在运行时完成的.
这就是为什么允许这个明显的错误:
dynamic x = "";
int i = string.Format("{0}", x);
Run Code Online (Sandbox Code Playgroud)
如果没有string.Format返回的重载,则不会打扰int.它稍后评估.
Ser*_*rvy 11
错误消息告诉您这里到底出了什么问题:
无法动态分派扩展方法.考虑转换动态参数或调用扩展方法而不使用扩展方法语法.
title2是类型的dynamic.你需要把它投射到string,因为你知道它是什么.