4

VS2008 に ac# プロジェクトがあり、次のようなコード行がたくさんあります。

string s = "bla blab" + x + "bla bla bla" + y + .... ;

string.Format(...) を使用して、これらの文字列を単一の文字列に変換したいと思います。

私は現在 Resharper 5.0 を使用しており、ワンクリックで 1 行のコードをリファクタリングできます。問題は、このような行が 1000 行以上あり、各行を手動で調べたくないことです。

これを自動的に行う方法はありますか?

編集:マークが私を修正したので、私は本当にそれをする必要はありませんが、別の非常によく似た問題があります:私はこのコードを手に入れました

 string s = "aaaaaaaaaaaaaaaaaaaaaaaa" +
                   "aaaaaaaaaaaaaaaaaaaaaaaa" +
                   "aaaaaaaaaaaaaaaaaaaaaaaa" +
                   "aaaaaaaaaaaaaaaaaaaaaaaa" +
                   "aaaaaaaaaaaaaaaaaaaaaaaa" +
                   "aaaaaaaaaaaaaaaaaaaaaaaa" +
                   "aaaaaaaaaaaaaaaaaaaaaaaa";

(文字列は SQL クエリです)

そして、それを1つのconst文字列にリファクタリングしたいと思います:

string s = "aaaaaaaaaaaaaaaaaa....aaaaa";

(今回は効率がいいですよね?)

resharper は文字列ごとにこれを自動的に行うことができますが、何度もやりたいと思います。

行のインデントを維持することは素晴らしいことです:

string s = @"aaaaaaaaaaaaaaaaaaaaaaaa
                    aaaaaaaaaaaaaaaaaaaaaaaa
                    aaaaaaaaaaaaaaaaaaaaaaaa
                    aaaaaaaaaaaaaaaaaaaaaaaa
                    aaaaaaaaaaaaaaaaaaaaaaaa
                    aaaaaaaaaaaaaaaaaaaaaaaa
                    aaaaaaaaaaaaaaaaaaaaaaaa";

1行だけでもOKです。

ありがとう、レフ。

4

2 に答える 2

5

コメントから:

メモリに関してははるかに効率的です

いいえ、そうではありません。データは配列 (通常は GEN0) で渡され、フォーマット文字列を解析する必要があるため (公平を期すために、実際には非常に高速です)、わずかに効率が低下しますが、ほぼ同じです。string.Format

仕様では、複合文字列+シーケンス、つまり

string s = "abc" + x + "def" + y;

次のようにコンパイルされます。

string s = string.Concat("abc", x, "def", y);

内部的には、これは非常に効率的であり、古典的な「文字列の伸縮」の問題を解決しません。string.Formatさらに、 params-array のオーバーヘッドを回避するために、さまざまな数のオペランドを取るオーバーロードがあります。また、すべてのオペランドが文字列の場合の追加のオーバーロード (これはさらに簡単です)。

要するに、これはあなたに何の費用もかかりません。外部からフォーマットを提供できるようにするためにこれを行っていない限り (i18n シナリオでは非常に一般的です)、私はそのままにしておきます。あなたがしているのは、バグの危険を冒しているだけです。あなたはそれをより効率的にしていません。

于 2011-04-07T18:18:45.953 に答える
0

Resharper コードのクリーンアップを実行してみましたか? 必要な変更のみを行う別のプロファイルを作成できます。

于 2011-04-07T17:35:07.850 に答える