4

学生の名前と年齢 (名、姓、年齢を .txt ファイルに保存するプログラム) をコーディングしています。現在、「生徒の削除」部分を作成していますが、削除する名前 (ファイル名の .txt 拡張子を切り取って出力されます) をユーザーに選択させたい場合、「.txt」部分は置き換えられません。何もありません。
コードは次のとおりです。

    string inputSel; // Selection string for delete
    Console.WriteLine(" -- Deleting Grade {0} -- ", grade);
    Console.WriteLine("- Enter a student name to delete: ");
    foreach (string file in fileNames)
    {
        file.Replace(".txt", "");
        studentNames.Add(file);
        Console.WriteLine(file); // debug
    }
    foreach (string name in studentNames)
    {
        Console.Write("{0}\t", name);
    }
    Console.WriteLine();
    Console.Write("> ");
    inputSel = Console.ReadLine();

fileNames が である場合List<string>、これはこのコードが含まれるメソッドのパラメーターですList<string>
要するに、それは に置き換え".txt"られません""

4

4 に答える 4

8

これは、String.Replace が値を返すためであり、ここを参照して変更しないためです。

file = file.Replace(".txt", "");

使用することをお勧めします

file = Path.GetFileNameWithoutExtension(file);

Path.GetFileNameWithoutExtensionはすべての拡張機能で動作し、よりきれいに見え、そこで何が行われたかを示します:)

于 2013-10-30T07:21:36.733 に答える
3

String.Replaceメソッドは新しい文字列を作成します。渡す文字列は変更しません。置換の結果を文字列に割り当てる必要があります。

file = file.Replace(".txt", "");

Path.GetFileNameWithoutExtensionまた、拡張子なしでファイル名を取得するために使用することをお勧めします

file = Path.GetFileNameWithoutExtension(file);
于 2013-10-30T07:23:05.113 に答える
3

「.txt」を置き換えた後のファイル値の設定を省略しましたこれを試してください:

...
foreach (string file in fileNames)
{
    file = file.Replace(".txt", "");
    studentNames.Add(file);
    Console.WriteLine(file); // debug
}
...
于 2013-10-30T07:23:22.563 に答える