String包含VB.NET中的IgnoreCase

时间:2011-09-09 13:32:48

标签: c# .net vb.net string

在C#中存在一个问题:没有不区分大小写的String.Contains方法(请参阅Case insensitive 'Contains(string)')。

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

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

然而,我对它几乎没有“问题”:

1)在Visual Studio的立即窗口中,此方法显示为     “未宣布”;

2)如何动态调用此方法 (什么     应该是“来电者”对象)?说实际上我应该这样称呼它:

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

3)InStr函数的位置(谁拥有,汇集了什么)?

4 个答案:

答案 0 :(得分:8)

(我现在看到你的问题也涉及表达式,我没有太多经验,但谢天谢地Jon Skeet可以帮助你。至于问题的其他部分,我原来的答案在下面。)


InStr位于Microsoft.VisualBasic.Strings内。从C#代码

调用它的示例
string myString = "Hello World";
int position = Microsoft.VisualBasic.Strings.InStr(myString, "world");

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

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

另请注意,对于找到的项目,InStr从1开始,对于此类项目,IndexOf从0开始。此代码段中的index != position

答案 1 :(得分:2)

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

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

TheModule.Contains(source, toTest)

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

答案 2 :(得分:2)

看过你的编辑后,它更有意义 - 你无法调用这样的扩展方法。扩展方法只是一个静态方法,所以这样调用它。例如:

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

其中MyExtensions是声明Contains扩展方法的类。

答案 3 :(得分:1)

您可以采取Anthony的建议并制作扩展方法(或只是一种常规方法)并使用IndexOf:

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