Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 控制器扩展方法,而不使用此_C#_Asp.net Mvc 3 - Fatal编程技术网

C# 控制器扩展方法,而不使用此

C# 控制器扩展方法,而不使用此,c#,asp.net-mvc-3,C#,Asp.net Mvc 3,我想创建控制器扩展方法。到目前为止,我得到的信息如下 public ActionResult Foo() { this.ExtensionMethod(); return View(); } public static void ExtensionMethod(this Controller controller) { } 我不喜欢的是,ExtensionMethod必须使用this关键字调用。有没有可能摆脱这个?没有 正是this关键字使该方法成为扩展方法。没有它,它只是

我想创建控制器扩展方法。到目前为止,我得到的信息如下

public ActionResult Foo()
{
    this.ExtensionMethod();
    return View();
}

public static void ExtensionMethod(this Controller controller)
{

}
我不喜欢的是,ExtensionMethod必须使用
this
关键字调用。有没有可能摆脱这个?

没有

正是
this
关键字使该方法成为扩展方法。没有它,它只是一个静态方法

编辑:对不起,我误解了这个问题。有两个
this
关键字:一个在扩展方法中,另一个用于调用它


调用时需要
this
关键字的原因是需要指定要扩展的对象。C#不会自动解析对扩展方法的本地方法调用,除非您指定
this
关键字。

就是这样。你不能反对它

您可能会考虑将其放入基类中—这通常不是一个好主意(因为它会破坏基类)。

您可以像这样使用它

this.ExtensionMethod();


您的选择…

为什么不使用常规方法而不是扩展方法?@Tomas的确,如果您能够编辑类型本身,为什么不使用常规方法?扩展方法只是扩展锁定类型的糖类。因为这个方法将是帮助程序,我想嵌入到控制器类中。我不想每次使用该方法时都编写新的MyHelperClass().ExtensionMethod。他指的是从控制器本身调用该方法:this.ExtensionMethod()。不管怎样,扩展方法也是静态方法。扩展方法在IntelliSense中看起来更好:-)他问了关于调用
this.ExtensionMethod()的问题不是关于声明我问过关于使用关键字this的方法调用。我知道要获得扩展方法,这个关键字必须在方法声明中。是的,我几乎在发布答案时就发现了这一点。抱歉。@x2:或者糖不够甜。
ExtenstionClassName.ExtensionMethod(this);