9

今日、リソース ファイルに文字列を入れると文字列がリテラルとして扱われることがわかりました。つまり、「最初の行にテキスト \n 2 行目にテキスト」を入れると、エスケープ文字自体がエスケープされるため、格納されるのは "最初の行のテキスト \n 2 行目のテキスト" - すると、改行とタブの代わりにこれらがディスプレイに表示されます

だから私がやりたいのは、 string.replace を使用して変換すること\\です\-これはうまくいかないようです。

s.Replace("\\\\", "\\");

文字列はバックスラッシュが 1 つしかないと認識しているため、文字列はまったく変更されません。

s.Replace("\\", "");

すべての二重引用符を置き換え、\n の代わりに n だけを残します

また、@半分の\文字またはRegex.Replaceメソッドを使用しても同じ結果が得られます

文字ごとにループせずにこれを行う良い方法を知っている人はいますか?

4

3 に答える 3

15

は実際には 1 文字であるため\n、文字列内のバックスラッシュを単に置き換えるだけではこれを実現できません。\と次の文字の各ペアを次のようにエスケープ文字に置き換える必要があります。

s.Replace("\\n", "\n");
s.Replace("\\t", "\t");
etc
于 2008-12-10T22:20:50.793 に答える
9

resx ファイル自体を調整したほうがよいでしょう。改行は、次の 2 つの方法で入力できます。resx ファイルを XML として編集する (ソリューション エクスプローラーで右クリックし、[名前を付けて開く] を選択して [XML] を選択する) 方法と、デザイナーで行う方法です。

XML で行う場合は、Enter キーを押して、作成した改行の先頭に戻るだけで完了です。これは検索と置換でも実行できますが、ややこしい作業になります。

GUI resx エディターを使用する場合、SHIFT を押しながら ENTER を押すと、改行が表示されます。

実行時の置換を行うこともできますが、お気づきのように、実行するのは難しいです。私の考えでは、コードの匂いがします。(パフォーマンスの引数を作成することもできますが、それは、文字列リソースが呼び出される頻度と、一般的なアプリの規模によって異なります。)

于 2008-12-10T22:31:44.437 に答える
0

私は実際にはジョンのソリューションを使用し、XML を直接編集しています。それがプロジェクトにとってより良いソリューションだからです。

于 2008-12-10T23:03:15.963 に答える