エンジニアの将来って?

現在7年目のCOBOL→Java→C#エンジニアが、将来への考えや勉強のアウトプット、たまに腎臓について書くブログです

【C#】string.Formatと文字列補完を解説します

こんにちは。たいら(@tairaengineer2)です。
この記事では、C#でコンソールでstring.Format文字列補間で表示させるやり方を解説します。

前提条件

この記事では、Visual Studio 2017 Communityを使っています。
インストールの仕方は、下の記事をご参考ください。

www.tairax.com

string.Formatと文字列補間はどっちを使うべきか

文字列を作成する場合は、文字列補間を使った方が良いです。
理由は、以下の2点あります。

  • 簡単
  • エラーを発見しやすい

ただしC#のバージョンが6以降である場合のみです。
では、それぞれ解説します。

string.Formatとは

指定された形式に基づいてオブジェクトの値を文字列に変換し、別の文字列に挿入します。

String.Format Method (System) | Microsoft Docsから引用させて頂きました

書き方は

string.Format("{0},{1}", aaa, bbb)

どこに何が入るかと言いますと

  • {0}:aaa
  • {1}:bbb

という風に入っていきます。

文字列補間とは

$ 特殊文字は、リテラル文字列を挿入文字列として識別します。
挿入文字列は、挿入式が含まれている可能性がある文字列リテラルです。
挿入文字列が結果文字列に解決されると、挿入式を含む項目は、式の結果の文字列表現によって置き換えられます。 この機能は C# 6 以降のバージョンの言語で使用できます。

$ - 文字列補間 (C# リファレンス) | Microsoft Docsから引用させて頂きました

書き方は

$"{aaa},{bbb}"

string.Formatと文字列補間を解説するプログラム

プログラムはコンソールに文字列を表示するだけのプログラムです。
コンソールプロジェクトを作成するやり方は下の記事をご参考ください。

www.tairax.com

C#プログラム

using System;

/// <summary>
/// string.Formatと文字列補完を練習するクラス
/// </summary>
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            string name = "田中";
            int age = 20;

            Console.WriteLine("----------string.Format----------");
            Console.WriteLine(string.Format("名前は{0},年齢は{1}歳", name, age));

            Console.WriteLine("----------文字列補間----------");
            Console.WriteLine($"名前は{name},年齢は{age}歳");
        }
    }
}

実行結果

コンソール画面を表示させます。

f:id:Tairax:20181118143436p:plain

解説

string.Formatと文字列補間は、書き方は全然異なります。
が、同じものが表示されています。

----------string.Format----------
名前は田中,年齢は20歳
----------文字列補間----------
名前は田中,年齢は20歳

では、それぞれ解説します。

string.Format

string.Formatの仕組みは、このようになっています。

f:id:Tairax:20181118135136p:plain

順番どおりに入って、文字が作成されています。
{0}の部分にnameが入り、{1}の部分にはageが入ります。
だから、もしnameとageを逆に書いてしまった場合

名前は20,年齢は田中歳

という文字列が表示されてしまいます。
またもしstring.Formatで下のように変数が足りなかった場合

Console.WriteLine(string.Format("名前は{0},年齢は{1}歳", name));

コンパイルエラーにならず、実行できてしまいます。
実行すると

f:id:Tairax:20181118144634p:plain

----------string.Format----------

ハンドルされていない例外: System.FormatException: インデックス (0 ベース) は 0
以上で、引数リストのサイズよりも小さくなければなりません。
   場所 System.Text.StringBuilder.AppendFormatHelper(IFormatProvider provider, S
tring format, ParamsArray args)
   場所 System.String.FormatHelper(IFormatProvider provider, String format, Para
msArray args)
   場所 System.String.Format(String format, Object arg0)
   場所 ConsoleApp1.Program.Main(String[] args) 場所 C:\Users\○○○○○○\source\re
pos\ConsoleApp1\ConsoleApp1\Program.cs:行 18
続行するには何かキーを押してください . . .

と、このように実行するまでどこにエラーがあるか分かりません。

文字列補間

文字列補間は仕組みは、このようになっています。

f:id:Tairax:20181118140248p:plain

[$](ドルマーク)を先頭につけて、表示したい変数を入れるだけなので、string.Formatより文字列補間の方が簡単に文字列を作れます。

エラーも見つけやすいです。
たとえば[age]を宣言していない場合

f:id:Tairax:20181118150015p:plain

このようにエラーが表示されます。
また、string.Formatと違って文字列補間はインデックスが無いため、書き間違いも起こりにくいです。
なので、string.Formatより文字列補完の方がエラーを見つけやすいです。

まとめ:string.Formatより文字列補完を使おう

以上が、string.Formatと文字列補完の解説をしました。
使っているC#のバージョンが6以降の場合は、文字列補間を使うようにしましょう!
あなたのご参考になったのなら、とても嬉しいです(*´▽`*)
ではでは~(・ω・)ノシ

 

ほかにもC#勉強記事を書いてます。
よければご参考ください。

【C#】コンソールでHellow,Worldを表示させる

【C#】文字列を数値に変換できるか調べるTryParseメソッドの使い方

【C#】コード:IDE1006、説明:名前指定の規則違反: これらの単語は、大文字で始まらなければなりません、が出たときの対処方法