尝试在文件中实现更新字符串的某些部分 目前制作一些代码
FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
StreamReader sr = new StreamReader(filePath);
string[] line = sr.ReadToEnd().Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
List<string> lines = new List<string>();
string eventName = ','+eventNameUpdateTextBox.Text.ToString()+',';
foreach (var l in line)
{
if (l.Contains(eventName))
{
int start = l.IndexOf(eventName);
l.Remove(start, eventName.Length);
l.Insert(start, newNameTextBox.Text.ToString());
lines.Add(l);
}
else
{
lines.Add(l);
}
}
string toCsvOutput = string.Join(Environment.NewLine, lines.ToArray());
但结果 - 和以前一样的文件。
尝试调试它,结果看,该函数
l.Insert(start, newNameTextBox.Text.ToString());
不要更改字符串并返回与开头相同的字符串/为什么会发生?我哪里错了?
答案 0 :(得分:2)
字符串是不可变的,这意味着它们无法改变。您需要创建一个新字符串并将其分配给变量。
l = l.Remove(start, eventName.Length);
l = l.Insert(start, newNameTextBox.Text.ToString());
MSDN:
字符串是不可变的 - 字符串对象的内容不能 在创建对象后更改,尽管语法可以实现 好像你可以这样做。
答案 1 :(得分:1)
函数返回结果字符串,但不更改字符串的值(如果不是全部则更改大部分字符串)
试试这个:
FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
StreamReader sr = new StreamReader(filePath);
string[] line = sr.ReadToEnd().Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
List<string> lines = new List<string>();
string eventName = ','+eventNameUpdateTextBox.Text.ToString()+',';
foreach (var l in line)
{
if (l.Contains(eventName))
{
int start = l.IndexOf(eventName);
l = l.Remove(start, eventName.Length);
l = l.Insert(start, newNameTextBox.Text.ToString());
lines.Add(l);
}
else
{
lines.Add(l);
}
}
string toCsvOutput = string.Join(Environment.NewLine, lines.ToArray());
答案 2 :(得分:1)
您必须将更改分配给新的(字符串)变量。此字符串变量不能是l
,因为它是foreach loop
中迭代的那个,因此无法更改。您必须依赖临时变量,如下面的代码所示。
foreach (var l in line)
{
if (l.Contains(eventName))
{
string temp = l;
int start = l.IndexOf(eventName);
temp = temp.Remove(start, eventName.Length);
temp = temp.Insert(start, newNameTextBox.Text.ToString());
lines.Add(temp);
}
else
{
lines.Add(l);
}
}