将值类型作为类型对象传递给 C# 中的函数并发生装箱。
在 ASP.NET 中,我们分别有 Response.Write(..) 和 Response.Write(Server.HtmlEncode(..)) 的简写,<%= 和 <%:
Response.Write(..) 存在 char、string 和 object 的重载 - 因此我假设此代码将导致 Response.Write(object) 被调用并且 int 被装箱:
<%int myInt = 3;%>
<%=myInt%>
而据我了解,此版本不会导致拳击:
<%=myInt.ToString()%>
(如果我在这里错了,请纠正我)
但是 <%: 呢?
Server.HtmlEncode() 只接受一个字符串作为参数,不能用对象类型调用。那么在这种情况下发生了什么:
<%:nyInt%>
网络表单视图引擎会将其“编译”成类似
Response.Write(Server.HtmlEncode(myInt.ToString))
“魔术没有拳击”的场景?
更新
以下 Joe 的示例显示 <%:nyInt%> 被转换为
@__w.Write(System.Web.HttpUtility.HtmlEncode(myInt));
System.Web.HttpUtility.HtmlEncode 对 object 有重载 - 这意味着结论是 <%: myInt%> 导致装箱 - 无论它是否会导致性能损失:-)