1

我想知道为什么它不起作用:

string filename = optionFileNameFormat; // "{year}-{month}-{day} {name}"
Dictionary<string, string> tagList = new Dictionary<string, string>();
tagList.Add("author",System.Security.Principal.WindowsIdentity.GetCurrent().Name);
tagList.Add("year" , "" + DateTime.Now.Year);
tagList.Add("month", "" + DateTime.Now.Month);
tagList.Add("day"  , "" + DateTime.Now.Day);

foreach (var property in tagList)
{
    filename.Replace(@"{" + property.Key + @"}", property.Value);
}

我没有任何错误,但我的字符串没有改变。

4

4 回答 4

12

可能还有其他问题,但是我马上跳出来的是该Replace()函数不会更改 string。相反,它返回一个新字符串。因此,您需要将函数的结果分配回原来的:

filename = filename.Replace(@"{" + property.Key + @"}", property.Value);
于 2013-09-02T14:38:35.360 回答
3

String.Replace方法返回一个新字符串。它不会更改原始字符串。

返回一个新字符串,其中当前字符串中出现的所有指定 Unicode 字符或字符串都替换为另一个指定的 Unicode 字符或字符串

foreach因此,您应该在循环中分配一个新字符串或一个现有字符串:

filename = filename.Replace(@"{" + property.Key + @"}", property.Value);

或者

string newfilename = filename.Replace(@"{" + property.Key + @"}", property.Value);

请记住,在 .NET 中,字符串是不可变类型。你不能改变它们。即使你认为你改变了它们,你也会创建新的字符串对象。

于 2013-09-02T14:39:27.400 回答
1

foreach (var property in tagList)
{
    filename.Replace(@"{" + property.Key + @"}", property.Value);
}

只需进行以下更改:

filename =  filename.Replace(@"{" + property.Key + @"}", property.Value);
于 2013-09-03T04:54:13.387 回答
1

这是完成的代码:

 string filename = optionFileNameFormat; // "{year}-{month}-{day} {name}"
 Dictionary<string, string> tagList = new Dictionary<string, string>();
 tagList.Add("author",System.Security.Principal.WindowsIdentity.GetCurrent().Name);
 tagList.Add("year" , "" + DateTime.Now.Year);
 tagList.Add("month", "" + DateTime.Now.Month);
 tagList.Add("day"  , "" + DateTime.Now.Day);

 foreach (var property in tagList)
 {
     filename= filename.Replace(@"{" + property.Key + @"}", property.Value);
 }
于 2013-09-03T05:45:58.507 回答