2013-10-30 103 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); 

希望这会有所帮助!