40

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

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

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. 基本的には上記と同じですが、プラス記号はありません。同じ利点と欠点があります。

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

4

11 に答える 11

12

コードにこの長い文字列が本当に必要で、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+", " ");
于 2009-10-21T02:58:18.890 に答える
10

Visual Studio を使用している場合

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

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

于 2009-10-14T12:09:31.720 に答える
8

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

また、テキストファイル、リソースファイル、データベース、およびレジストリを使用することもできます。

于 2009-10-14T12:12:50.423 に答える
8

それは、弦がどのように使用されるかによって異なります。ここでの答えはすべて有効ですが、コンテキストは重要です。長い文字列「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がユーザーに表示される場合は、DeveloperArtの回答が最適です...これらはリソースファイルに含まれている必要があります。

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

それ以外は、いいえ、見た目が美しく、入力しやすいものは何も知りません(ワードラップの提案は良いアイデアですが、差分ツール、コードプリントアウト、またはコードレビューツールにうまく変換されない可能性があります)。それらは休憩です。(私は個人的にプラス記号のアプローチを使用して、印刷物やコードレビューの行の折り返しをきれいにします)。

于 2009-10-21T02:44:49.357 に答える
6

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

于 2009-10-14T12:12:33.883 に答える
3

個人的には、おそらく XML 文書などのファイルから、それほど大きな文字列を読み取るでしょう。

于 2009-10-14T12:26:24.033 に答える
2

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

于 2009-10-14T12:40:15.523 に答える
0

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

于 2009-10-14T12:11:52.950 に答える
0

Project / Properties / SettingsVisual Studio のトップ メニューから使用します。を作りますscope = "Application"

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

string sql = Properties.Settings.Default.xxxxxxxxxxxxx;

于 2018-03-09T14:36:02.913 に答える