[英]Translating VB.NET string manipulation to C#
我正在嘗試將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();
}
誰能告訴我這是否正確?
如果您想完美地模擬Chr
和Asc
的行為,則必須向Microsoft.Visualbasic
(“添加引用”和“ .NET”選項卡下的頂部菜單)添加引用,並使用Strings.Chr
和Strings.Asc
Garry Shutler的回答警告此鏈接 )。 您的代碼將變為:
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
和char
),如您在上述鏈接中獲得最多投票的答案所示。 這是錯的 。 使用兩種替代方法測試此代碼,以確認只有Strings
選項始終提供正確的結果。
“PROPER”VB.NET代碼:
Dim Part1 As String = "Some string"
Dim p_str As String = Nothing
For I As Integer = 0 To Part1.Length - 1
p_str = Chr(Asc(Part1.Substring(I, 1)) + 17)
Next
您不需要對Microsoft.VisualBasic的引用(編輯:請參見注釋-在這種情況下,您確實需要它),並且您的“ for”循環條件應為“ I <= 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();
}
但是你需要在for循環中聲明I變量。 更正:
for (int I = 0; I <= Part1.Length-1; I++)
{
...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.