我正在尝试将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();
}
谁能告诉我这是否正确?
答案 0 :(得分:6)
您必须在Microsoft.Visualbasic
(顶级菜单,“添加引用”和“.NET”标签下)添加引用,如果要模拟,请使用Strings.Chr
和Strings.Asc
完全是Chr
和Asc
的行为(正如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的 Asc
和Chr
的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++)
{
...
}