将VB.NET字符串操作转换为C#

时间:2013-09-07 07:58:03

标签: c# vb.net

我正在尝试将VB.NET代码转换为C#代码。

这是我的VB.NET代码:

Dim Part1 As String = "Some string"
Dim p_str As String
For I = 1 To Len(Part1)
    p_str = Chr(Asc(Mid$(Part1, I, 1)) + 17)
Next

我已将其翻译为C#,如下所示:

string Part1 = "Some string";
string p_str = null;
for (I = 0; I <= Part1.Length - 1; I++)
{
    p_str = Convert.ToChar((Part1.IndexOf(Part1.Substring(I, 1)) + 65) + 17).ToString();
}

谁能告诉我这是否正确?

3 个答案:

答案 0 :(得分:6)

您必须在Microsoft.Visualbasic(顶级菜单,“添加引用”和“.NET”标签下)添加引用,如果要模拟,请使用Strings.ChrStrings.Asc完全是ChrAsc的行为(正如Garry Shutler的答案在this link中所警告的那样)。您的代码将成为:

string Part1 = "Some string";
string p_str = null;
for (int I = 0; I < Part1.Length; I++)
{
    p_str = Strings.Chr(Strings.Asc(Part1.Substring(I, 1)) + 17).ToString();
}

澄清1:你发布的原始代码不是(纯)VB.NET ,它是VB(VB.NET允许写入大部分VB命令)。这就是为什么需要进行如此多的更改(例如:更改起始索引); VB.NET与C#.NET更相似(如下所示)。

澄清2:人们普遍认为,VB的 AscChr 的C#翻译仅仅是强制转换( int和{{分别为1}} ,正如您在上述链接中投票最多的答案中所见。 这是错误的。使用两种替代方法测试此代码,以确认只有char选项始终提供正确的结果。

“PROPER”VB.NET代码:

Strings

答案 1 :(得分:1)

您不需要对Microsoft.VisualBasic的引用(编辑:请参阅注释 - 在这种情况下,您执行需要它),并且您的'for'循环条件应为“I&lt; = Part1.Length“:

string Part1 = "Some string";
string p_str = null;
for (int I = 1; I <= Part1.Length; I++)
{
    'edit: I thought this would work, but it doesn't:
    p_str = ((char)(Convert.ToInt32(Part1[I - 1]) + 17)).ToString();
    'edit: the following works, with "Strings.Chr" and "Strings.Asc" remaining:
    p_str = Microsoft.VisualBasic.Strings.Chr(Microsoft.VisualBasic.Strings.Asc(Part1[I - 1]) + 17).ToString(); 
}

答案 2 :(得分:0)

差不多但你需要在for循环中声明I变量。校正:

for (int I = 0; I <= Part1.Length-1; I++)
 {
...

 }