【发布时间】:2025-12-01 15:40:01
【问题描述】:
我一直在观看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 和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
【问题讨论】:
-
关于您的编辑,VB.NET 假定第一个参数的类型是您要扩展的类型。
标签: c# vb.net signature c#-to-vb.net