我一直在编写一个程序,用于存储学生姓名和年龄(名字,姓氏,年龄在.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>
,它是此代码所在方法的参数.schoolNames也是List<string>
,它存储名称(文件名不包含.txt),但它由于某种原因仍然使用.txt打印名称
简而言之,它不会将".txt"
替换为""
。
答案 0 :(得分:9)
这是因为String.Replace返回值,而不是修改,请参阅here
file = file.Replace(".txt", "");
我建议使用
file = Path.GetFileNameWithoutExtension(file);
Path.GetFileNameWithoutExtension将适用于所有扩展程序,它看起来更干净,并说明在那里做了什么:)
答案 1 :(得分:3)
String.Replace
方法创建新字符串。它不会修改您传递的字符串。您应该将替换结果分配给您的字符串:
file = file.Replace(".txt", "");
另外,我建议您使用Path.GetFileNameWithoutExtension
获取不带扩展名的文件名
file = Path.GetFileNameWithoutExtension(file);
答案 2 :(得分:3)
替换“.txt”后,您已省略设置文件值 试试这个:
...
foreach (string file in fileNames)
{
file = file.Replace(".txt", "");
studentNames.Add(file);
Console.WriteLine(file); // debug
}
...
答案 3 :(得分:1)
string.Replace();
不修改它返回副本的字符串。另一个问题是foreach iterators are readonly所以你需要这样的东西。
fileNames = fileNames.Select
(Path.GetFileNameWithoutExtension);
希望这有帮助!