2013-11-21 143 views
1

我有一个控制器,其中我将html文件读入一个变量。将一个变量的值替换为另一个值

读它之后,我从变量为其他值替换一些值,

但问题是,没有什么happend。

这里有什么问题?

有人能帮我一个忙吗?

string path = "/mypath/myfile.html"; 
string s = System.IO.File.ReadAllText(path); 
s.Replace("@%a%@","hi"); 
s.Replace("@%b%@","yo"); 
s.Replace("@%c%@","asdfasdf"); 
s.Replace("@%d%@", "http://www.google.com"); 
+4

.NET中的字符串是不可变的 –

回答

4

字符串是不可变的 - 您应该将替换结果分配给您的字符串。您也可以像这样的连锁替换操作:

string s = System.IO.File.ReadAllText(path) 
      .Replace("@%a%@","hi") 
      .Replace("@%b%@","yo") 
      .Replace("@%c%@","asdfasdf") 
      .Replace("@%d%@", "http://www.google.com"); 

只要记住 - 所有的字符串操作(如替换,子串等)将创建并返回新的字符串,而不是改变原来的。这同样意味着对DateTime和其他不可变对象的操作。

更新:您还可以声明替换的字典和更新字符串在一个循环:

var replacements = new Dictionary<string, string> { 
    { "@%a%@","hi" }, { "@%b%@","yo" }, { "@%c%@","asdfasdf" } // ... 
}; 

string s = System.IO.File.ReadAllText(path); 

foreach(var replacement in replacements) 
    s = s.Replace(replacement.Key, repalcement.Value); 
+1

是的。你是对的..工作很好..非常感谢你 – user2232273

2

字符串是不可改变的。基本上,一个对象是不可变的,如果它的状态一旦创建对象就不会改变。因此,如果一个类的实例是不可变的,则它是不可变的。

string path = "/mypath/myfile.html"; 
string s = System.IO.File.ReadAllText(path); 
s = s.Replace("@%a%@","hi"); 
s = s.Replace("@%b%@","yo"); 
s = s.Replace("@%c%@","asdfasdf"); 
s = s.Replace("@%d%@", "http://www.google.com"); 
+0

非常感谢你的答案..它的工作也是如此。 – user2232273

相关问题