web-dev-qa-db-ja.com

C#でlooooongの1行の文字列を宣言する

C#で長い1行の文字列を宣言する適切な方法はありますか?そのため、エディターで文字列を宣言および/または表示することは不可能ではありませんか?

私が知っているオプションは次のとおりです。

1:実行させます。文字列が画面の右端にたどり着くので、これは悪いことです。開発者がメッセージを読んでいると、面倒なスクロールと読み取りが必要になります。

string s = "this is my really long string.  this is my really long string.  this is my really long string.  this is my really long string.  this is my really long string.  this is my really long string.  this is my really long string.  this is my really long string.  ";

2:@ +改行。これはコードでは見栄えが良いですが、文字列に改行が導入されています。さらに、コードで見栄えを良くしたい場合は、改行が表示されるだけでなく、文字列の各行の先頭にぎこちないスペースが表示されます。

string s = @"this is my really long string.  this is my long string.
             this line will be indented way too much in the UI. 
This line looks silly in code.  All of them suffer from newlines in the UI.";

3:"" + ...これは正常に機能しますが、タイプするのが非常にイライラします。半行分のテキストをどこかに追加する必要がある場合は、すべての種類の+を更新し、テキストを移動する必要があります。

string s = "this is my really long string.  this is my long string. " + 
           "this will actually show up properly in the UI and looks " +
           "pretty good in the editor, but is just a pain to type out " +
           "and maintain";

4:string.format or string.concat。基本的に上記と同じですが、プラス記号はありません。同じ利点と欠点があります。

これをうまく行う方法は本当にありませんか?

35
Cory

それは、使用されている弦がどのように巻き取られるかによって異なります。ここでの答えはすべて有効ですが、コンテキストは重要です。長い文字列「s」がログに記録される場合は、次のLog4netの例のように、ログガードテストで囲む必要があります。

if (log.IsDebug) {
    string s = "blah blah blah" + 
    // whatever concatenation you think looks the best can be used here,
    // since it's guarded...
}

長い文字列sがユーザーに表示される場合、Developer Artの答えが最良の選択です...これらはリソースファイルにある必要があります。

他の用途(SQLクエリ文字列の生成、ファイルへの書き込み[ただし、これらのリソースについて再度検討する]など)の場合、単なるリテラル以上のものを連結する場合は、StringBuilderをWael Dalloulと見なし、特に、文字列が関数に巻き込まれる可能性がある場合、その関数は、いつか遠い将来、タイムクリティカルなアプリケーションで何度も呼び出される可能性があります(これらすべての呼び出しが合計されます)。これは、たとえば、変数であるパラメーターがあるSQLクエリを作成するときに行います。

それ以外は、いや、見栄えがよく、入力も簡単なことは何も知りません(ワードラップの提案はいいアイデアですが、diffツール、コードプリントアウト、またはコードレビューツールにうまく変換できない場合があります)。それらは休憩です。 (私は個人的に、プラス記号アプローチを使用して、印刷やコードレビューの行折り返しをきちんとしています)。

8
Ogre Psalm33

やり方がある。非常に長い文字列をリソースに入れます。テキストがあるべき場所なので、そこに長いテキストを置くこともできます。それらをコードで直接使用することは、本当に悪い習慣です。

62
user151323

Visual Studioを使用している場合

Tools > Options > Text Editor > All Languages > Word Wrap

他のテキストエディタ(メモ帳を含む)でもこれを実行できると確信しています!

8
stevehipwell

reallyがコードにこの長い文字列を必要とし、end-quote-plus-begin-quoteを実際に入力したくない場合は、次のように試すことができます。

string longString = @"Some long string, 
    with multiple whitespace characters 
    (including newlines and carriage returns)
    converted to a single space
    by a regular expression replace.";

longString = Regex.Replace(longString, @"\s+", " ");
7
John Fisher

ソースファイルで定義する必要がありますか?それ以外の場合は、リソースまたは構成ファイルで定義します。

6
d91-jal

次のようにStringBuilderを使用できます。

StringBuilder str = new StringBuilder();
str.Append("this is my really long string.  this is my long string. ");
str.Append("this is my really long string.  this is my long string. ");
str.Append("this is my really long string.  this is my long string. ");
str.Append("this is my really long string.  this is my long string. ");
string s = str.ToString();

テキストファイル、リソースファイル、データベース、レジストリも使用できます。

5
Wael Dalloul

個人的には、おそらくXML文書などのファイルから大きな文字列を読み取ることになります。

3
James

本当に長い文字列の場合は、XML(またはリソース)に保存します。コードに含めるのが理にかなっている場合は、+演算子を使用して複数行の文字列を連結します。ただし、これを行う場所を考えることができる唯一の場所は、XMLファイルをテストしてXMLファイルを使用しないようにしようとしている、XMLの読み取りと解析を行うコードの単体テストです。単体テストなので、ほとんどの場合、参照する文字列もそこに置いておきます。これらの場合、それらをすべて#regionディレクティブに分離して、必要に応じて表示/非表示にすることができます。

2
tvanfosson

あなたはStringBuilderを使うことができます

1
Jimmeh

使用 Project / Properties / Settings Visual Studioのトップメニューから。 scope = "Application"

[値]ボックスに非常に長い文字列を入力でき、ボーナスとして改行が保持されます。次に、コードは次のようにその文字列を参照できます。

string sql = Properties.Settings.Default.xxxxxxxxxxxxx;

0
Max Drawbaugh

私はそれを実行させるか、string.formatを使用して文字列を1行に書き込み(let it runメソッド)、各引数を新しい行に配置します。これにより、読みやすくなるか、少なくともリーダーに詳細に読まなくても、彼が長い文字列に何を期待できるかについての考え。

0
David Božjak