C#でコードを書く際に文字列を使用する場合の基本的なイディオムについてまとめた。
文字列が同じかどうかを判定する
(例)string型の変数であるnameが"冨岡義勇"かどうかを判定したい場合
if(name == "冨岡義勇")
文字がnullか空文字かどうかを判定する
(例)string型の変数であるnameがnullか空文字かどうかを判定したい場合
if(String.IsNullOrEmpty(name))
こうすることで、
・name == ""
・name.Length == 0
・name == null
などのint型、string型の場合の処理をまとめてやってくれる。
値がnullでないことが分かっており、空文字が返ってくる可能性がある場合
その場合は、空文字かどうかを判定すればいいだけなので、
if (name == String.Empty)
もしくは
if (name == "")
で判定する。
個人的には、 コードの短さと分かりやすさから後者を採用したい。
空白だけが入力されているかも判定したい場合
場合によっては、" "のように空白しか入力されていない場合があるが、これかどうかを判定したい場合は、
if(String.IsNullOrWhiteSpace(name))
と書くことで、null、" "かどうかを判定できる。
値の頭に特定の文字列があるかどうかを判定する
(例)string型の変数であるnameの頭に、「"水柱・"」という値が含まれているかどうかを判定したい場合
if(name.StartsWith("水柱・"))
値の後に特定の文字列があるかどうかを判定する
(例)string型の変数であるnameの後に、「"様"」という値が含まれているかどうかを判定したい場合
if(name.EndsWith("様"))
Linqを使うパターン
値の中に特定の文字があるかどうかを判定する
(例)string型の変数であるnameに、「・」があるかどうかを判定したい場合、
if (name.Contains('・'))
LINQのContainsメソッドを使用する。
文字列のすべてをチェックするパターン
(例1)パスワードなど、大文字を1文字以上入れるなどの処理が必要な時に、入力されたstring型の変数に大文字が1文字以上入っているかどうかチェックしたい場合
if(name.Any(el => Char.IsUpper(el)))
LINQのAnyメソッドを使うことで、 値を1文字ずつチェックし1文字でも、条件を満たしている文字があれば以降の処理をせずに、Trueを返す。
この場合、IsUpperメソッドで大文字があれば、Trueを返す。
(例2)金額や年齢など、数値のみ代入されているかどうかを判定したい場合
if(name.All(el => Char.IsDigit(el)))
LINQのAllメソッドを使うことで、値を1文字ずつチェックし、全て条件を満たしていればTrueを返す。
この場合は、IsDigitメソッドで値が数値かどうかを判定し、Trueを返す。