簡體   English   中英

將VB.NET字符串操作轉換為C#

[英]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();
}

誰能告訴我這是否正確?

如果您想完美地模擬ChrAsc的行為,則必須向Microsoft.Visualbasic (“添加引用”和“ .NET”選項卡下的頂部菜單)添加引用,並使用Strings.ChrStrings.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的AscChr的C#轉換僅是強制轉換(分別轉換為intchar ),如您在上述鏈接中獲得最多投票的答案所示。 這是錯的 使用兩種替代方法測試此代碼,以確認只有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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM