2013-10-30 147 views
4

我一直在編碼存儲學生姓名和年齡的程序(名字,姓氏,年齡在.txt文件中)。我現在正在製作「刪除學生」部分,並且當我希望用戶選擇要刪除的名稱(通過切斷文件名的.txt擴展名打印)時,它不會替換「.txt」部分一無所有。
的代碼是:替換列表中的字符串C#

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

,其中文件名是List<string>,正是因爲這個代碼是在方法的參數studentNames也是List<string>,它存儲的名稱(不.txt文件名)。但由於某些原因,它仍然會用.txt打印名稱。長話短說,它不會取代".txt"""

回答

9

這是因爲返回與string.replace價值,而不是修改看到here

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

我建議使用

file = Path.GetFileNameWithoutExtension(file); 

Path.GetFileNameWithoutExtension將與所有的擴展工作,它看起來更清潔,並說還有什麼做: )

3

String.Replace方法創建新字符串。它不會修改您傳遞的字符串。你應該更換指定的結果您的字符串:

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

此外,我建議你使用Path.GetFileNameWithoutExtension獲取文件名不帶擴展

file = Path.GetFileNameWithoutExtension(file); 
3

您省略設置文件值後替換「.TXT」 試試這個:

... 
foreach (string file in fileNames) 
{ 
    file = file.Replace(".txt", ""); 
    studentNames.Add(file); 
    Console.WriteLine(file); // debug 
} 
... 
1
string.Replace(); 

不修改字符串它會返回一個副本。另一個問題是foreach iterators are readonly所以你需要這樣的東西。

fileNames = fileNames.Select 
      (Path.GetFileNameWithoutExtension); 

希望這會有所幫助!