c# - VB6 到 C# InsTR 函数转换问题

标签 c# vb6

是VB6代码

i = InStr(1, strText, "Mc", CompareMethod.Binary)
    If (i <> 0) And (i + 2 <= lngLength) Then Mid(strText, i + 2, 1) = UCase(Mid(strText, i + 2, 1))

做同样的事情

i = strText.IndexOf("Mc");
    if ((i != 1) && (i + 2 <= lngLength))
    {
        strText = strText.Substring(i + 2, 1);
        strText = strText.ToUpper();            
    }

在 C# 中? i 是一个已经初始化的 int。现在,如果从 VB6 中的 0 到 C# 中的 1 比较良好,我确实对返回值进行了调整。

最佳答案

它不是在做同样的事情。作业

Mid(strText, i + 2, 1) = UCase(Mid(strText, i + 2, 1))

仅替换字符串中的那部分(即 i+2 处的单个字符),其余部分保持不变。您的 C# 代码会丢弃字符串的其余部分。

由于 .NET 字符串是不可变的,因此无法直接转换此方法。

最接近的翻译是显式构造字符串,即做

strText = strText.Substring(0, i + 1) +
    strText.Substring(i + 2, 1).ToUpper() +
    strText.Substring(i + 3);

然而,在一个循环中做很多事情是非常低效的,这就是为什么 .NET 提供了 StringBuilder class用于重复构造字符串。通常,最好使用上述 StringBuilder 翻译就地操作字符串的 VB6 代码。

也就是说,可能有一个更简单的翻译,即在第一个代码之后的意图,而不是字母。在 VB6 和 C# 中,您不会使用 InStr 后跟替换 - 您会直接使用 String.Replace

还要注意更改的索引(C# 和 VB.NET 是从 0 开始的,VB6 可能是从 1 开始的)。

关于c# - VB6 到 C# InsTR 函数转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17463887/

相关文章:

c# - 将动态生成的项目放在按钮周围的圆圈中

C# 泛型 : Modify hidden inherited member in derived class

c# - 文件读取外来字符

mysql - 在vb6中选择组合框的值后自动获取文本框的值

vba - 为什么 VBA.Collection.Count 是一种方法

c# - 将 VB6 类型转换为 C# 结构

c# - Windows 8 的 UDID

c# - 单元测试依赖方法

mysql - VB6 - 从 mySQL 表向 Access 表插入数据

vb6 - 有 Visual Basic 6 反编译器吗?