0
string rawConnString = Properties.Settings.Default.ConnectionString;

我想用“rawConnString”做到这一点:

rawConnString.Replace("<<DATA_SOURCE>>", server);
rawConnString.Replace("<<INITIAL_CATALOG>>", "tempdb");

然后将最终字符串设置为变量 finalConnString。

我该怎么做呢?

这是 ASP .NET 4.0/C# 顺便说一句。

4

6 回答 6

2
string finalString = Properties.Settings.Default.ConnectionString.Replace("<<DATA_SOURCE>>", server).Replace("<<INITIAL_CATALOG>>", "tempdb"); 

将在一行代码中完成所有操作。但它更丑 IMO 因为你必须滚动。您问题中的代码对我来说似乎更干净,更具可读性。

并且在一行代码中完成它根本不会帮助您的性能。无论哪种方式,它都应该编译成相同的 MSIL。我会按照你的方式保留它。

于 2012-09-12T19:33:20.250 回答
1

不确定这是否是您所追求的,但您可以将它们链接起来:

var finalConnString = rawConnString.Replace("<<DATA_SOURCE>>", server)
    .Replace("<<INITIAL_CATALOG>>", "tempdb");

如果您希望通过单个方法调用来完成它,我认为 .NET 没有任何原生功能。不过,您始终可以创建扩展方法。这是一个注重性能的ReplaceMany实现(签名.ReplaceMany(string[] oldValues, string[] newValues))。

于 2012-09-12T19:33:15.383 回答
1

你的意思是这样的

string tempString=rawConnString.Replace("<<DATA_SOURCE>>", server);
sting finalstring=tempString.Replace("<<INITIAL_CATALOG>>", "tempdb");
于 2012-09-12T19:33:25.543 回答
1

坦率地说,这是微不足道的。你有 90% 的代码需要:

string rawConnString = Properties.Settings.Default.ConnectionString;

string finalConnString = rawConnString
                            .Replace("<<DATA_SOURCE>>", server)
                            .Replace("<<INITIAL_CATALOG>>", "tempdb");
于 2012-09-12T19:34:32.403 回答
1

为避免使用 的两个背靠背调用Replace,您可以使用正则表达式。然而,这远不如原来的可读性:

string connString = Regex.Replace(
    rawConnString
,   "(<<DATA_SOURCE>>)|(<<INITIAL_CATALOG>>)"
,   m => m.Groups[1].Success ? server : "tempdb"
);

链接到ideone。

于 2012-09-12T19:38:59.563 回答
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");
于 2012-09-12T19:35:50.633 回答