C#におけるstringとStringの違いについて

C#におけるstringとStringの違いについて

C#のコードで、stringStringの両方の表記を目にすることがありませんか? これはどちらも.NETのSystem.String型を指しており、実体としての違いはありません。


言語仕様上の違い

stringはC#の**予約語(キーワード)**であり、Stringは.NETのSystem.Stringクラスそのものを表しています。これは、intSystem.Int32boolSystem.Booleanの関係と同じです。


実行時の違いはナシ

string s1 = "example";
String s2 = "example";

Console.WriteLine(s1.GetType() == s2.GetType()); // True

このように、stringStringで宣言された変数はどちらもSystem.String型であり、動作上の違いはありません。コンパイル後のILコードでも差は確認されていません。


使い分け

以下のような使い分けが一般的と言えるでしょう。

  • string:変数宣言、戻り値、引数など、日常的な型指定に使用されます。C#では基本的にこちらで書くことが多いでしょう。

    string name = "Taro";
    
  • StringString.IsNullOrEmptyString.Formatなど、静的メソッドを呼び出す際に使用されるケースが見られます。型名としての明示性を重視した記述です。

    string greet = String.Format("Hello {0}!", name);
    

ただ、string.IsNullOrWhiteSpaceといった表記も可能であるため、どちらを使うかはコーディング規約や個人のスタイルに依存します。個人的には、大文字のStringはString.Formatの時くらいで、他はすべて小文字というのが一般的かな、と思います。


名前空間に関する補足

Stringを使用する場合、System名前空間への参照が必要ですが、通常はusing System;が含まれているため、特に意識する場面は少ないでしょう。一方、stringはC#のキーワードであるため、どのスコープでも問題なく使用できます。


まとめ

項目 string String
種別 C#の予約語(エイリアス) .NETのSystem.Stringクラス
実体 同じ(System.String 同じ(System.String
主な用途 型の宣言や変数定義など 静的メソッドの呼び出しなど
推奨傾向 一般的なコードではstringが推奨 規約に応じて使い分ける

stringStringはどちらも同じ型を表しており動作に違いはありません。可読性やスタイルの統一といった観点から、プロジェクトに合わせて記述するのがいいでしょう。