string rawConnString = Properties.Settings.Default.ConnectionString;
我想用“rawConnString”执行此操作:
rawConnString.Replace("<<DATA_SOURCE>>", server);
rawConnString.Replace("<<INITIAL_CATALOG>>", "tempdb");
然后将最终字符串设置为变量finalConnString。
我将如何做到这一点?
这是ASP .NET 4.0 / C#btw。
答案 0 :(得分:2)
string finalString = Properties.Settings.Default.ConnectionString.Replace("<<DATA_SOURCE>>", server).Replace("<<INITIAL_CATALOG>>", "tempdb");
将在一行代码中完成所有操作。但是IMO更加丑陋,因为你必须滚动。您问题中的代码似乎是 LOT 更干净,对我来说更具可读性。
在一行代码中执行此操作根本无法帮助您提高性能。无论哪种方式都应该编译为相同的MSIL。我会像你一样离开它。
答案 1 :(得分:1)
不确定这是否是您所追求的,但您可以链接它们:
var finalConnString = rawConnString.Replace("<<DATA_SOURCE>>", server)
.Replace("<<INITIAL_CATALOG>>", "tempdb");
如果您希望通过单个方法调用来执行此操作,我认为.NET没有任何原生代码。您始终可以创建扩展方法。这是一个performance-conscious ReplaceMany
implementation(签名.ReplaceMany(string[] oldValues, string[] newValues)
)。
答案 2 :(得分:1)
你的意思是这样的
string tempString=rawConnString.Replace("<<DATA_SOURCE>>", server);
sting finalstring=tempString.Replace("<<INITIAL_CATALOG>>", "tempdb");
答案 3 :(得分:1)
坦率地说这是微不足道的;你有90%的代码需要:
string rawConnString = Properties.Settings.Default.ConnectionString;
string finalConnString = rawConnString
.Replace("<<DATA_SOURCE>>", server)
.Replace("<<INITIAL_CATALOG>>", "tempdb");
答案 4 :(得分:1)
为避免使用Replace
的两个背靠背调用,您可以使用正则表达式。但是,这比原来的可读性差得多:
string connString = Regex.Replace(
rawConnString
, "(<<DATA_SOURCE>>)|(<<INITIAL_CATALOG>>)"
, m => m.Groups[1].Success ? server : "tempdb"
);
答案 5 :(得分:0)
首先,String.replace不会更改原始字符串:它会创建一个新字符串。所以你必须将返回值分配给某个东西。所以逻辑上最简单的事情是:
finalstring=rawConnString.Replace("<<DATA_SOURCE>>", server);
finalstring=finalstring.Replace("<<INITIAL_CATALOG>>", "tempdb");
请注意,对于第二次替换,您希望从第一次替换的结果开始,而不是原始字符串。
由于String.replace返回一个字符串,而String.replace接受一个字符串,您可能会发现它们更容易一起运行:
finalstring=rawConnString.Replace("<<DATA_SOURCE>>", server).Replace("<<INITIAL_CATALOG>>", "tempdb");