2

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

それが正しいかどうか誰か教えてもらえますか?

4

3 に答える 3

6

Microsoft.Visualbasic(トップメニューの「参照の追加」および「.NET」タブの下)への参照を追加し、 and の動作を完全にエミュレートする場合は and を使用する必要がありますStrings.Chr(Garry Shutlerの回答によるこのリンクで警告されているように)。コードは次のようになります。Strings.AscChrAsc

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とそれぞれ) であることが一般に認められています。charこれは間違っています。このコードを両方の選択肢でテストして、Stringsオプションのみが常に正しい結果をもたらすことを確認してください。

「適切な」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
于 2013-09-07T08:27:42.950 に答える
1

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(); 
}
于 2013-09-07T14:27:55.957 に答える
0

ほとんどですが、 for ループで I 変数を宣言する必要があります。修正:

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

 }
于 2013-09-07T08:01:17.753 に答える