[C#]$を使ったstring.formatの別の書き方

投稿日:

str += $"(文字列) = {x}";

保守で、機能修正を行う必要があって、修正をしていたところ、こんな書き方をしているプログラムがありまして・・・
なんだこりゃ???
となった訳です。

だって、初めて見たし・・・

別の会社の人のプログラムだった

うちの会社では、全PGを内製は出来ない状態になっているので、開発を専門でやっている会社にお願いをすることが良くあります。

今回の記述箇所も、その別会社の人の修正部分でした。

自社の人のソースを見る限り、こんな書き方をしている(出来る)人はいないので、「お?」と思った次第。

知らないままじゃ、修正も怖くて出来ないので調べました。

文字列挿入ができる

何が出来るかっていうと、これで文字列の挿入が出来るんですよ。
お手軽です。

VBだと普通に

str = str & x;

なんて書けたりするんですが、C言語だとそうはいかない。
C#もVer2015だと

str += "(文字列) = " + x;

なんて書けるので、有り難味は分かりづらいんですけどね。

その昔の書き方

昔と言うのもなんですが、C/C++時代(今も現役で使用されてるので時代というのもなんですが・・・)の記法だとこうなります。

C#
outputString = "With redefined new line characters:";
Console.WriteLine(outputString);
C/C++
 
outputString = "With redefined new line characters:"; 
Console.WriteLine("%s",outputString); 

同じコマンドラインに出力するだけでも、一々、表示したい箇所と順番を守って「%s(数字なら%dとか)」を並べ、「,」以降に順番どおりに変数を指定する必要があるんですよ。

平気で10個以上並べる人もいるので、修正対象としてプログラムのソースを渡された時に、ため息しか出なかった事もありましたw

そういう意味では、.NET以降?は書きやすくなったと思うなぁ。

どちらも知っているほうがいいけれど・・・

どちらの記法も対応出来るに越したことはありません。

だけど、ロジック考えたり仕様を作るのに記法ありきでやることはない。
正直、そんなに記法ばかり覚えても意味は少ないと思うので、出てきた時に調べて使えればいいかな。

「format」はどこへ行ったんだよ

string.formatとの違いを書くのが最初の目的だったw
//xが変数
str += $"(文字列) = {x}";

//xが変数で{0}の部分に挿入される
str += string.format("(文字列) = {0}" , x);

これが、それぞれの書き方になります。

C/C++の書き方として紹介したみたいに、変数の分だけ「{0}{1}{2}…」と並べて、その後で「x,y,z…」と変数を指定する必要があったんですよ。

「$」を使うと、非常に手間が減るので使おう。
まぁ、C# 2015では使わなくていいかもだけどねw







-C#
-,

関連記事

[C#]文字を繰り返したものを取得したい。

いちいちfor文とかで繰り返すのも効率が悪いなと思ってたので、処理を関数化・・・ ただ、共通関数として登録しないので、別のところで使いたい場合は、同じ関数が複数登録されちゃうことに・・・ 更には、思い …

ORACLEでORA-01861: リテラルが書式文字列と一致しません

ORA-01861: リテラルが書式文字列と一致しません このエラー、ぶっちゃけ、意味が分からないところでもある。 日付の指定時に発生してて、原因が判明するまでに結構回り道をしました。 ネットで検索し …

C#で”LC.exe” はコード -1 を伴って終了しました(”LC.exe” exited with code -1)ってエラー

未だに確定した原因は自分で掴めてないんだけど、とりあえずエラーで検索して対策してみた。 どうにも、ビルド時にEXEフォルダ?とかにSRCフォルダからのコピーが上手くいかずにロックされてしまったりすると …

C#で計算時の切り上げ・切捨て・四捨五入を行う方法

普段使わないと馴染みが薄いですが、日常で行う計算にも切り上げ・切捨て・四捨五入は割りと使われていたりします。 今回はそんな計算のお話。 例えば、クルマ購入時の端数の切捨てとかね。 「千円の位を負けてく …

[C#]TextBoxで、マウスクリック(1回目)だけ、内容を全選択させる

TextBoxの内容を全選択させるには、SelectAll()を使用 マウスの1回目も含めるなら、BeginInvoke~を使用 VB.net版はこちら。 日本の中心付近で仕様変更と闘うSE日記[VB …


カテゴリー