如何解决问题在ViewPage上调用扩展方法
| 我为ViewPage创建了以下扩展方法:using System.Web.Mvc;
namespace G3Site {
public static class ViewPage_Extensions {
public static void Test(this ViewPage vp) {
vp.Writer.Write(\"this is a test\");
}
}
}
然后,我在aspx页面上放置导入语句
<%@ Import Namespace=\"G3Site\" %>
我可以通过这样很好地调用Test()方法:
<% this.test(); %>
但是,当我尝试调用它而不参考以下内容时:
<% test(); %>
我收到编译器错误:
CS0103: The name \'Test\' does not exist in the current context
有谁知道为什么会这样,并且有办法解决吗?
解决方法
根据C#语言规范(第7.6.5.2节),C#编译器要求将扩展方法称为表达式的“ off”(例如变量或对对象的引用)。
,这不仅是ASP.Net MVC视图的限制,这是C#中扩展方法的一般规则:
public class SomeClass
{
public void Method()
{
ExtensionMethod();
}
}
public static class Extensions
{
public static void ExtensionMethod(this SomeClass sc) { }
}
这不会编译,因为C#编译器要求使用实例调用扩展方法。为何如此决定,可能是由于某些极端的情况,只有埃里克·利珀特才可以梦想
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。