VB InStr等效于c#

问题描述 投票:0回答:7

我不知道为什么我得到0的结果,这是a的正确值

我有VB

Dim searched As String = "<results>" & vbCrLf & "<field name=\""FID\""/>" & vbCrLf & "<field name=\""StartFID\""/>" & vbCrLf & "<field name=\""Vertex1\""/>" & vbCrLf & "<field name=\""Vertex2\""/>" & vbCrLf & "<field name=\""Slope\""/>" & vbCrLf & ""

Dim sought As String = "<rs FID=\""87\"" StartFID=\""87\"" Vertex1=\""29\"" Vertex2=\""30\"" Slope=\""-1\""/>"

Dim a As Integer = InStr(searched, sought)

我想做的是,在转换为c#时获得与a == 0相同的结果。

我试过了

int a = String.Compare(searched, sought);
int a = String.IndexOf(searched, sought);
int a = String.Equals(searched, sought);
c# vb.net
7个回答
3
投票

C#中的字符串是零索引的。如果a.IndexOf(b)返回0,则字符串b出现在a位置的字符串0中。

如果搜索的字符串不在输入中,则IndexOf()返回-1


3
投票

InStrIndexOf的行为之间的一个区别是,当找不到字符串时,InStr返回零,而IndexOf返回-1。使用IndexOf是在C#中搜索子字符串的惯用方法,以及在您的情况下使用的正确方法。

如果你想直接使用InStr,你可以通过引用Microsoft.VisualBasic程序集,然后调用InStr作为Strings类的静态方法来实现:

int a = Strings.InStr(searched, sought);

0
投票

String.IndexOf应该工作,但如果你真的想使用InStr,你仍然可以做到。只需添加对Microsoft.VisualBasic.dll的引用,并添加“using Microsoft.VisualBasic;”在你的文件的顶部,你可以使用Strings.InStr:像Strings.InStr(searched, sought)


0
投票

这三种方法都是出于不同的目的,并不相同。这就是为什么他们有不同的名字..

int a = String.IndexOf(searched, sought);

这是您应该使用的方法,并且正是为此目的。或者你可以使用string.Contains()

int a = String.Compare(searched, sought);

比较两个指定的String对象,忽略或尊重它们的大小写,并返回一个整数,指示它们在排序顺序中的相对位置。

bool a = String.Equals(searched, sought);

确定两个字符串的相等性。


0
投票

作品......谢谢Carsten

int b = searched.IndexOf(sought);

b = 0

我看到了现在的问题...当我将字符串移动到计算字符串的变量时,我得到了错误。我不确定我是否正确使用了InStr。


0
投票

你可以使用searched.Contains(sought)


0
投票

只需使用IndexOf()+ 1即可返回0而不是-1

int a = searched.IndexOf(sought)+1;

它对我有帮助

© www.soinside.com 2019 - 2024. All rights reserved.