字符串包含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
函数位于何处(谁拥有,什么程序集(?
(我现在知道你的问题也涉及表达式,我在这些方面没有太多经验,但谢天谢地,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