字符串包含VB.NET中的IgnoreCase

本文关键字:中的 IgnoreCase NET VB 包含 字符串 | 更新日期: 2023-09-27 18:08:00

在C#中存在一个问题:不存在不区分大小写的String.Contains方法(请参阅不区分大小字母';Contains(string(';(。

在VB.NET中,问题是相同的,但有一个解决方法:

Dim Str As String = "UPPERlower"
Dim b As Boolean = InStr(Str, "UpperLower") 

然而,我对它有一些"问题":

1( 在Visual Studio的即时窗口中,此方法显示为"未申报";

2( 如何动态地调用此方法(what应该是"caller"对象(?实际上我应该这样称呼它:

expr = Expression.Call(myStringParam, "Contains", Nothing, constantExpression, Expression.Constant(StringComparison.InvariantCultureIgnoreCase))

3( InStr函数位于何处(谁拥有,什么程序集(?

字符串包含VB.NET中的IgnoreCase

(我现在知道你的问题也涉及表达式,我在这些方面没有太多经验,但谢天谢地,Jon Skeet可能会帮助你。至于你问题的其他部分,我的原始答案如下。(


CCD_ 3存在于CCD_。从C#代码调用它的示例

string myString = "Hello World";
int position = Microsoft.VisualBasic.Strings.InStr(myString, "world");

当然,如果我想要一个不区分大小写的结果,我会选择System.String上存在的IndexOf的重载,这允许我指定一个StringComparison

int index = myString.IndexOf("world", StringComparison.CurrentCultureIgnoreCase);

还要注意,对于找到的项目,InStr从1开始,对于此类项目,IndexOf从0开始。index != position

看到您的编辑后,它更有意义——您不能调用这样的扩展方法。扩展方法只是一个静态方法,所以用这种方式调用它。例如:

expr = Expression.Call(GetType(MyExtensions), "Contains", Nothing, _
           myStringParam, constantExpression, _
           Expression.Constant(StringComparison.InvariantCultureIgnoreCase))

其中CCD_ 11是声明CCD_ 12扩展方法的类。

Visual Studio的即时窗口与编译程序中方法的正常执行有点不同。这与在调试器下执行扩展方法没有什么不同(实际上是一样的(。

这在Visual Studio 2005或2008中没有得到很好的支持。除了通过的非扩展方法调用它之外,没有太多的方法可以使它工作

TheModule.Contains(source, toTest)

对它的支持在2010年有了很大改善,我希望它能发挥作用。

您可以接受Anthony的建议,创建一个扩展方法(或者只是一个普通方法(并使用IndexOf:

<Extension()>
Public Shared Function CaseInsensitiveContains(source As String, value As String) As Boolean
    Return source.IndexOf(value, StringComparison.OrdinalIgnoreCase) >= 0
End Function