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"); 

1行のコードですべてを行います。しかし、スクロールする必要があるため、見苦しいです。あなたの質問のコードは、私にはずっときれいで読みやすいようです。

そして、それを 1 行のコードで実行しても、パフォーマンスはまったく向上しません。どちらの方法でも、すべてが同じ MSIL にコンパイルされるはずです。私はあなたが持っていたままにしておきます。

于 2012-09-12T19:33:20.250 に答える
1

を 2 回続けて呼び出すのを避けるためにReplace、正規表現を使用できます。ただし、これは元のものよりはるかに読みにくいです。

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

イデオンへのリンク。

于 2012-09-12T19:38:59.563 に答える
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 に答える
0

まず、String.replace は元の文字列を変更せず、新しい文字列を作成します。したがって、戻り値を何かに割り当てる必要があります。したがって、論理的に最も簡単なことは次のとおりです。

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

2 番目の置換では、元の文字列ではなく、最初の置換の結果から開始することに注意してください。

String.replace は文字列を返し、String.replace は文字列を受け取るため、これらを一緒に実行する方が簡単な場合があります。

finalstring=rawConnString.Replace("<<DATA_SOURCE>>", server).Replace("<<INITIAL_CATALOG>>", "tempdb");
于 2012-09-12T19:35:50.633 に答える