元注:搜索单词“this”是不可能的。
我在ASP.NET中遇到了一个奇怪的场景,需要使用this
关键字。但这不是为了解决本地和实例变量之间的冲突,就像在构造函数中看到的那样。
Microsoft.Web.Mvc包含一个名为ControllerExtensions
的类,我正在使用RedirectToAction(Expression<Action<TController>> action)
重载。也许这很特别,因为重载是扩展。
RedirectToAction(c => c.Index())
无法编译,并且它说Cannot convert lambda expression to type 'string' because it is not a delegate type
。现在,这听起来像是它认为我正在使用第一个接受字符串的重载。
this.RedirectToAction(c => c.Index())
可以编译通过。我还可以静态调用它,将this
作为第一个参数传递。
为什么编译器不能弄清楚我正在寻找接受表达式的重载并使用它?因为该方法需要涉及一个动作的表达式,而不仅仅是一个动作。我完全不理解Expressions命名空间,所以不知道使用这个参数类型的目的。
无论问题1的答案如何,为什么简单地添加
this
就可以解决所有问题?
this
,编译器会在检查基类之前搜索我的方法吗?那就可以解释了吗? - Tesserexthis.
;) 我知道这是一个有争议的StyleCop指导,但我实际上认为这是一个很好的建议,因为它完全避免了类似这样的奇怪问题。 - Reed Copsey