gpt4 book ai didi

c# - "this"在 C# 方法签名中指的是什么,是否有 VB.NET 等效项?

转载 作者:太空狗 更新时间:2023-10-29 18:08:37 25 4
gpt4 key购买 nike

我一直在看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> liststring 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>有关,否则没有转换成我能说的任何东西.

所以问题是:

  1. 什么是this实际上在 C# 方法签名中引用和/或做?
  2. 是否有 VB.NET 等效项?



对问题 1 的回答:

所以我们明确说明了this does in fact 表示扩展方法,从给出的答案来看,似乎没有内联 VB 等价物。

我想补充一点,因为我提到了 ASP.NET MVC Storefront视频,上面的 C# 示例是从他的 CategoryFilters 中提取的类(class)。我假设这就是您实现被称为管道和过滤器管道 方法的方式。



问题 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

最佳答案

那是一种扩展方法。 this指定它是 this <parameter> 的扩展方法输入,在你的情况下,IList<Category> .

There is a VB.NET equivalent here , 虽然它是一个属性,而不是关键字。

扩展方法需要知道要应用的类型,请注意,这对于泛型来说是显而易见的。扩展方法:

public static string GetNameOf(this List<Category> category) { return ""; }

List<Category> 外,将不可用.

关于c# - "this"在 C# 方法签名中指的是什么,是否有 VB.NET 等效项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10231457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com