我一直在再次观看ASP.NET MVC Storefront视频系列,并看到了一些我以前从未注意到或关注过的东西。我注意到在各种方法的签名列表中有很多引用。这是一个例子:this
public static Category WithCategoryName(this IList<Category> list, string categoryName)
{
return
(
from s in list
where s.Name.Equals(categoryName, StringComparison.InvariantCultureIgnoreCase)
select s
)
.SingleOrDefault();
}
我立即理解了签名中的IList<Category> list
and the string categoryName
,但对它的作用感到困惑this
。
所以,作为一个 95% 的 VB 人,我将代码弹出到我最喜欢的转换器中并得到:
<System.Runtime.CompilerServices.Extension>
Public Shared Function WithCategoryName(list As IList(Of Category), categoryName As String) As Category
Return
(
From s In list
Where s.Name.Equals(categoryName, StringComparison.InvariantCultureIgnoreCase)
Select s
)
.SingleOrDefault()
End Function
首先,我不完全确定为什么<System.Runtime.CompilerServices.Extension>
包含在内,也许它只是转换器,但是,正如你所看到的,this
除非它与上述<System.Runtime.CompilerServices.Extension>
.
所以问题是:
this
在 C# 方法签名中实际引用和/或做什么?- 是否有 VB.NET 等价物?
对问题 1 的回应:
所以我们已经明确地澄清了this
它实际上表示一个扩展方法,并且从给出的答案来看,似乎没有内联 VB 等价物。
我想补充一点,因为我提到了ASP.NET MVC Storefront视频,所以上面的 C# 示例是从他的CategoryFilters
课程中提取的。我假设这就是您实现所谓的管道和过滤器或管道方法的方式。
对问题 2 的回应:
我假设 VB.NET 处理扩展方法的方式是这样的,例如:
Imports System.Runtime.CompilerServices
Public Module StringExtensions
<Extension()> _
Public Function IsNullOrBlank(ByVal s As String) As Boolean
Return s Is Nothing OrElse s.Trim.Length.Equals(0)
End Function
End Module