VB.Net 2019中String类型Intellisense显示多余<Extension>方法问题
问题解答
这些带<Extension>标记的方法,本质是System.Linq.Enumerable类提供的Linq扩展方法,之所以会出现在String的Intellisense里,核心原因是:
- String类型实现了
IEnumerable(Of Char)接口,而Linq的绝大多数扩展方法都是针对IEnumerable(Of T)这个泛型接口定义的。只要一个类型实现了该接口,Linq的扩展方法就会自动对其生效。 - 哪怕你只保留了System和Microsoft.VisualBasic引用,
System.Linq命名空间属于System程序集的一部分,VB.Net项目默认会自动导入这个命名空间,所以Intellisense会把这些方法列出来。
你看到的Any、All这类方法,其实是可以作用在String上的——因为字符串可以被看作是字符的集合,比如用Any判断字符串里是否包含某个特定字符是完全可行的。但像Average、Sum这类方法,虽然Intellisense会显示,但直接调用会报错,必须传入一个把Char转换为数值类型的委托才能正常运行,比如把字符转成对应的ASCII码值再计算平均值。
举个实际代码例子:
Dim demoStr As String = "abc123" ' 有效调用:判断字符串是否包含数字字符 Dim hasDigit = demoStr.Any(Function(c) Char.IsDigit(c)) ' 需要转换才能运行:计算字符ASCII码的平均值 Dim avgAscii = demoStr.Average(Function(c) AscW(c))
内容的提问来源于stack exchange,提问作者spinjector
相关产品推荐
相关产品推荐

