【问题标题】:VB InStr Equivalent in c#c#中的VB InStr等价物
【发布时间】:2015-11-02 10:11:25
【问题描述】:

我不知道为什么我得到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);

【问题讨论】:

  • searched.IndexOf(sought) 有什么问题?
  • 卡斯滕说得对,IndexOf 应该或多或少地做同样的事情。
  • 试试 Strings.InStr()。链接msdn.microsoft.com/en-us/library/47d6yh63(v=vs.110).aspx。在引用中添加 Microsoft.VisualBasic dll。否则 IndexOf 是要走的路。
  • 谢谢卡斯滕。我以为我试过了.. 显然没有.. 再次感谢。
  • VB 字符串中的\" 是什么?像这样的转义序列在 VB 中无效。您的字符串可能不包含您认为它们包含的内容。

标签: c# vb.net


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 感谢您的回复,我也在想如果发现 InStr 和 IndexOf 都返回 0,这对我来说是不正确的
    • @Deke 我能想到在 C# 代码中使用 InStr 的唯一原因是模拟 VB.NET 的特定输出。特别是,将返回值用作原始字符串的索引是不正确的。
    • 我不想在 C# 中使用 InStr。我想使用 IndexOf
    【解决方案3】:

    您可以简单地使用 IndexOf()+1 返回 0 而不是 -1

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

    它对我有用,对它有帮助

    【讨论】:

      【解决方案4】:

      您可以使用searched.Contains(sought)

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

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

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

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

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

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

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

          判断两个字符串是否相等。

          【讨论】:

            【解决方案7】:

            工作...感谢卡斯滕

            int b = searched.IndexOf(sought);
            

            b = 0

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

            【讨论】:

              猜你喜欢
              • 2017-12-20
              • 2011-03-09
              • 1970-01-01
              • 2021-08-24
              • 2011-03-18
              • 2019-04-01
              • 1970-01-01
              • 1970-01-01
              • 2022-06-11
              相关资源
              最近更新 更多