C#のif文・else文を基礎から解説|条件分岐の書き方とエラーを防ぐ実践例
はじめに
C#でプログラムを書くとき、最初につまずきやすい構文のひとつが条件分岐です。条件分岐とは、「ある条件を満たす場合だけ処理を実行する」「条件によって別々の処理に分ける」といった書き方のことです。
その代表が、if文、else文、else if文です。
たとえば、点数が80点以上なら「合格」と表示し、それ以外なら「不合格」と表示するような処理は、C#のif文・else文で簡単に書けます。
一方で、検索キーワードとしてよく見られる「c# if then else」という表現には注意が必要です。C#では、VBや一部の疑似コードのようにthenは使いません。C#で条件分岐を書くときは、if (条件式) { 処理 }という形を使います。
この記事では、C#のif文・else文の基本構文から、else ifの使い方、よくあるエラー、実践的なサンプルコード、switch文や三項演算子との使い分けまで、初心者にもわかりやすく解説します。
1. C#のif文・else文とは?条件分岐の基本を理解しよう
C#のif文・else文は、条件に応じて実行する処理を切り替えるための構文です。
プログラムでは、常に同じ処理だけを上から順番に実行するとは限りません。
たとえば、次のような場面があります。
C#int score = 85;
if (score >= 80)
{
Console.WriteLine("合格です");
}
このコードでは、scoreが80以上の場合だけ「合格です」と表示されます。
条件分岐を使うことで、ユーザーの入力内容、ログイン状態、点数、年齢、在庫数、エラーの有無などに応じて処理を変えられます。
1-1. if文は「条件がtrueのときだけ処理する」ための構文
if文は、条件式の結果がtrueのときだけ、中の処理を実行します。
C#int age = 20;
if (age >= 18)
{
Console.WriteLine("成人です");
}
この例では、age >= 18が条件式です。
ageが20なので、20 >= 18はtrueになります。そのため、Console.WriteLine("成人です");が実行されます。
もしageが16だった場合、条件式はfalseになるため、if文の中の処理は実行されません。
C#int age = 16;
if (age >= 18)
{
Console.WriteLine("成人です");
}
この場合は、何も表示されません。
1-2. else文は「条件がfalseのときの処理」を書く構文
else文は、if文の条件がfalseだった場合に実行する処理を書きます。
C#int age = 16;
if (age >= 18)
{
Console.WriteLine("成人です");
}
else
{
Console.WriteLine("未成年です");
}
このコードでは、age >= 18がtrueなら「成人です」、falseなら「未成年です」と表示されます。
elseを使うと、条件を満たす場合と満たさない場合の両方に対して処理を書けます。
1-3. else if文は複数条件を順番に判定する構文
条件が2つだけでなく、3つ以上ある場合はelse if文を使います。
C#int score = 75;
if (score >= 90)
{
Console.WriteLine("評価はAです");
}
else if (score >= 70)
{
Console.WriteLine("評価はBです");
}
else if (score >= 50)
{
Console.WriteLine("評価はCです");
}
else
{
Console.WriteLine("評価はDです");
}
この例では、点数に応じて評価を分けています。
else ifは上から順番に判定され、最初にtrueになったブロックだけが実行されます。一度どこかの条件に一致すると、それ以降のelse ifやelseは実行されません。
1-4. 「then」はC#では使わない:VBや疑似コードとの違い
「c# if then else」と検索する人は多いですが、C#のif文ではthenを使いません。
C#では、次のように書きます。
C#if (score >= 80)
{
Console.WriteLine("合格です");
}
else
{
Console.WriteLine("不合格です");
}
一方、Visual Basicでは次のようにThenを使います。
VBIf score >= 80 Then
Console.WriteLine("合格です")
Else
Console.WriteLine("不合格です")
End If
疑似コードでも、説明として「if 条件 then 処理 else 処理」のように書かれることがあります。
しかし、C#ではthenは不要です。C#でthenを書くとコンパイルエラーになります。
間違った例は次のとおりです。
C#if (score >= 80) then
{
Console.WriteLine("合格です");
}
正しくは、thenを書かずに次のようにします。
C#if (score >= 80)
{
Console.WriteLine("合格です");
}
2. C#のif文の基本構文と書き方
C#のif文は、条件式を丸かっこ()で囲み、実行したい処理を中かっこ{}で囲んで書きます。
基本形を覚えておけば、さまざまな条件分岐に応用できます。
2-1. if文の基本形:if (条件式) { 処理 }
C#のif文の基本構文は次のとおりです。
C#if (条件式)
{
条件式がtrueのときに実行する処理;
}
具体例を見てみましょう。
C#int number = 10;
if (number > 0)
{
Console.WriteLine("正の数です");
}
このコードでは、number > 0がtrueなので、「正の数です」と表示されます。
条件式の部分には、trueまたはfalseになる式を書きます。
2-2. 条件式にはbool型の結果が必要
C#のif文では、条件式の結果がbool型である必要があります。
bool型とは、trueまたはfalseのどちらかを表す型です。
C#bool isLoggedIn = true;
if (isLoggedIn)
{
Console.WriteLine("ログイン済みです");
}
このように、bool型の変数をそのままif文の条件式に使うこともできます。
一方で、次のようなコードはC#ではエラーになります。
C#int count = 1;
if (count)
{
Console.WriteLine("データがあります");
}
C#では、整数の1を自動的にtrueとして扱いません。正しくは、比較演算子を使って条件式をbool型にします。
C#int count = 1;
if (count > 0)
{
Console.WriteLine("データがあります");
}
2-3. 中かっこ{}を使うべき理由
C#では、if文の処理が1行だけの場合、中かっこ{}を省略できます。
C#if (score >= 80)
Console.WriteLine("合格です");
この書き方は文法上は正しいです。
しかし、初心者のうちは中かっこを省略しないことをおすすめします。理由は、処理の範囲がわかりにくくなり、バグにつながりやすいからです。
たとえば、次のコードを見てください。
C#if (score >= 80)
Console.WriteLine("合格です");
Console.WriteLine("おめでとうございます");
一見すると、2行ともif文の中にあるように見えます。しかし実際には、if文の対象は最初の1行だけです。
つまり、次のコードと同じ意味になります。
C#if (score >= 80)
{
Console.WriteLine("合格です");
}
Console.WriteLine("おめでとうございます");
これを防ぐためにも、基本的には次のように中かっこを書きましょう。
C#if (score >= 80)
{
Console.WriteLine("合格です");
Console.WriteLine("おめでとうございます");
}
2-4. 実行順を簡単なコード例で確認する
if文の実行順を確認してみましょう。
C#int temperature = 30;
Console.WriteLine("判定を開始します");
if (temperature >= 30)
{
Console.WriteLine("暑いです");
}
Console.WriteLine("判定を終了します");
実行結果は次のようになります。
判定を開始します
暑いです
判定を終了します
temperature >= 30がtrueなので、if文の中の処理が実行されます。
では、temperatureを20にするとどうなるでしょうか。
C#int temperature = 20;
Console.WriteLine("判定を開始します");
if (temperature >= 30)
{
Console.WriteLine("暑いです");
}
Console.WriteLine("判定を終了します");
実行結果は次のようになります。
判定を開始します
判定を終了します
条件がfalseなので、if文の中の「暑いです」は実行されません。
3. if else文の書き方と使いどころ
if else文は、条件がtrueの場合とfalseの場合で処理を分けたいときに使います。
「条件を満たした場合はA、満たさない場合はB」という場面でよく使われます。
3-1. if else文の基本構文
if else文の基本構文は次のとおりです。
C#if (条件式)
{
条件式がtrueのときの処理;
}
else
{
条件式がfalseのときの処理;
}
elseには条件式を書きません。直前のifの条件がfalseだった場合に実行されます。
3-2. trueの場合とfalseの場合で処理を分ける例
次の例では、在庫があるかどうかで表示内容を切り替えています。
C#int stock = 5;
if (stock > 0)
{
Console.WriteLine("在庫があります");
}
else
{
Console.WriteLine("在庫がありません");
}
stockが5なので、stock > 0はtrueです。そのため、「在庫があります」と表示されます。
stockが0の場合は、else側が実行されます。
C#int stock = 0;
if (stock > 0)
{
Console.WriteLine("在庫があります");
}
else
{
Console.WriteLine("在庫がありません");
}
実行結果は次のとおりです。
在庫がありません
3-3. ユーザー入力や点数判定で使う実践例
if else文は、ユーザー入力の判定でもよく使います。
C#Console.Write("パスワードを入力してください: ");
string password = Console.ReadLine();
if (password == "secret")
{
Console.WriteLine("ログイン成功");
}
else
{
Console.WriteLine("パスワードが違います");
}
このコードでは、入力された文字列が"secret"と一致するかどうかを判定しています。
点数判定の例も見てみましょう。
C#int score = 65;
if (score >= 60)
{
Console.WriteLine("合格です");
}
else
{
Console.WriteLine("不合格です");
}
scoreが60以上なら合格、それ以外なら不合格です。
このように、if else文は「2択の判定」に向いています。
3-4. elseを書かないケースとの違い
if文では、必ずしもelseを書く必要はありません。
C#if (isLoggedIn)
{
Console.WriteLine("マイページを表示します");
}
この場合、isLoggedInがfalseなら何も実行されません。
一方、falseの場合にも何か処理をしたいなら、elseを書きます。
C#if (isLoggedIn)
{
Console.WriteLine("マイページを表示します");
}
else
{
Console.WriteLine("ログインしてください");
}
つまり、elseを書くかどうかは「条件を満たさない場合にも処理が必要か」で判断します。
4. else if文で複数条件を分岐する方法
条件が3つ以上ある場合は、else if文を使います。
「Aなら処理1、Bなら処理2、Cなら処理3、それ以外なら処理4」のように、複数の条件を順番に判定できます。
4-1. else if文の基本構文
else if文の基本構文は次のとおりです。
C#if (条件式1)
{
条件式1がtrueのときの処理;
}
else if (条件式2)
{
条件式2がtrueのときの処理;
}
else if (条件式3)
{
条件式3がtrueのときの処理;
}
else
{
どの条件にも当てはまらないときの処理;
}
else ifは必要な数だけ追加できます。
ただし、条件が増えすぎると読みづらくなるため、後述するswitch文やメソッド分割も検討しましょう。
4-2. 条件は上から順番に判定される
else if文では、条件は上から順番に判定されます。
次のコードを見てください。
C#int score = 85;
if (score >= 60)
{
Console.WriteLine("合格です");
}
else if (score >= 80)
{
Console.WriteLine("優秀です");
}
このコードでは、scoreが85でも「優秀です」は表示されません。
なぜなら、最初のscore >= 60がtrueになり、その時点でif文全体の処理が終了するからです。
このような場合は、条件の順番を見直す必要があります。
C#int score = 85;
if (score >= 80)
{
Console.WriteLine("優秀です");
}
else if (score >= 60)
{
Console.WriteLine("合格です");
}
このように、範囲が狭い条件や優先したい条件を先に書くのがポイントです。
4-3. 成績判定・年齢判定・料金判定のサンプルコード
成績判定の例です。
C#int score = 92;
if (score >= 90)
{
Console.WriteLine("A評価");
}
else if (score >= 80)
{
Console.WriteLine("B評価");
}
else if (score >= 70)
{
Console.WriteLine("C評価");
}
else if (score >= 60)
{
Console.WriteLine("D評価");
}
else
{
Console.WriteLine("不合格");
}
年齢判定の例です。
C#int age = 15;
if (age >= 65)
{
Console.WriteLine("シニア料金です");
}
else if (age >= 18)
{
Console.WriteLine("大人料金です");
}
else if (age >= 6)
{
Console.WriteLine("子ども料金です");
}
else
{
Console.WriteLine("幼児料金です");
}
料金判定の例です。
C#int quantity = 12;
if (quantity >= 20)
{
Console.WriteLine("20%割引です");
}
else if (quantity >= 10)
{
Console.WriteLine("10%割引です");
}
else if (quantity >= 5)
{
Console.WriteLine("5%割引です");
}
else
{
Console.WriteLine("割引はありません");
}
どの例でも、上から順番に条件が判定されます。条件の並び順によって結果が変わるため、範囲の大きさや優先順位を意識しましょう。
4-4. else ifを増やしすぎたときの見直しポイント
else ifをたくさん書くと、コードが長くなり、読みづらくなります。
次のような場合は見直しを検討しましょう。
C#if (status == "new")
{
Console.WriteLine("新規");
}
else if (status == "processing")
{
Console.WriteLine("処理中");
}
else if (status == "done")
{
Console.WriteLine("完了");
}
else if (status == "error")
{
Console.WriteLine("エラー");
}
else
{
Console.WriteLine("不明");
}
このように、1つの値に対して分岐している場合は、switch文のほうが読みやすいことがあります。
C#switch (status)
{
case "new":
Console.WriteLine("新規");
break;
case "processing":
Console.WriteLine("処理中");
break;
case "done":
Console.WriteLine("完了");
break;
case "error":
Console.WriteLine("エラー");
break;
default:
Console.WriteLine("不明");
break;
}
また、条件が複雑な場合は、条件式を変数やメソッドに分けると読みやすくなります。
C#bool isDiscountTarget = age >= 65 || isStudent;
if (isDiscountTarget)
{
Console.WriteLine("割引対象です");
}
5. C#のif文でよく使う比較演算子と論理演算子
if文の条件式では、比較演算子や論理演算子をよく使います。
これらを理解すると、より柔軟な条件分岐を書けるようになります。
5-1. ==、!=、>、<、>=、<=の使い方
C#でよく使う比較演算子は次のとおりです。
| 演算子 | 意味 | 例 |
|---|---|---|
== | 等しい | x == 10 |
!= | 等しくない | x != 10 |
> | より大きい | x > 10 |
< | より小さい | x < 10 |
>= | 以上 | x >= 10 |
<= | 以下 | x <= 10 |
使用例です。
C#int x = 10;
if (x == 10)
{
Console.WriteLine("xは10です");
}
if (x != 0)
{
Console.WriteLine("xは0ではありません");
}
if (x >= 5)
{
Console.WriteLine("xは5以上です");
}
==は比較、=は代入です。if文の条件式で値を比較したいときは、基本的に==を使います。
5-2. &&で「かつ」、||で「または」を表す
複数の条件を組み合わせるときは、論理演算子を使います。
&&は「かつ」を表します。
C#int age = 25;
bool hasTicket = true;
if (age >= 18 && hasTicket)
{
Console.WriteLine("入場できます");
}
この場合、age >= 18とhasTicketの両方がtrueのときだけ処理が実行されます。
||は「または」を表します。
C#bool isMember = false;
bool hasCoupon = true;
if (isMember || hasCoupon)
{
Console.WriteLine("割引を適用できます");
}
この場合、isMemberまたはhasCouponのどちらかがtrueなら処理が実行されます。
5-3. !で条件を反転する
!は条件を反転する演算子です。
C#bool isLoggedIn = false;
if (!isLoggedIn)
{
Console.WriteLine("ログインしてください");
}
isLoggedInはfalseですが、!isLoggedInはtrueになります。
そのため、「ログインしてください」と表示されます。
!は便利ですが、多用すると読みにくくなることがあります。
C#if (!isNotAvailable)
{
Console.WriteLine("利用できます");
}
このように否定が重なると意味がわかりにくくなります。変数名を見直して、読みやすい条件式にすることが大切です。
5-4. 条件式を組み合わせるときの注意点
複数の条件を組み合わせる場合は、丸かっこ()を使って意図を明確にすると読みやすくなります。
C#int age = 20;
bool isStudent = true;
bool hasCoupon = false;
if ((age < 18 || isStudent) && hasCoupon)
{
Console.WriteLine("学生または18歳未満で、クーポンを持っています");
}
丸かっこがないと、演算子の優先順位を正しく理解していない人には読みにくくなります。
条件式が長くなりすぎる場合は、bool型の変数に分けましょう。
C#bool isYouthOrStudent = age < 18 || isStudent;
bool canUseDiscount = isYouthOrStudent && hasCoupon;
if (canUseDiscount)
{
Console.WriteLine("割引を利用できます");
}
このように書くと、条件の意味がわかりやすくなります。
6. 初心者がつまずきやすいif文・else文のエラーと対処法
C#のif文・else文は基本的な構文ですが、初心者がつまずきやすいポイントもあります。
ここでは、よくあるミスと対処法を紹介します。
6-1. 条件式に=を書いてしまうミス
比較したいのに、==ではなく=を書いてしまうミスがあります。
間違った例です。
C#int score = 80;
if (score = 80)
{
Console.WriteLine("80点です");
}
C#では、score = 80は代入です。さらに、代入式の結果はbool型ではないため、コンパイルエラーになります。
正しくは次のように書きます。
C#int score = 80;
if (score == 80)
{
Console.WriteLine("80点です");
}
比較は==、代入は=と覚えましょう。
6-2. thenを書いてコンパイルエラーになるミス
「c# if then else」と調べている人が特につまずきやすいのが、thenを書いてしまうミスです。
C#では次のコードはエラーになります。
C#if (score >= 60) then
{
Console.WriteLine("合格です");
}
else
{
Console.WriteLine("不合格です");
}
C#にthenは不要です。正しくは次のように書きます。
C#if (score >= 60)
{
Console.WriteLine("合格です");
}
else
{
Console.WriteLine("不合格です");
}
thenを使うのはVisual Basicなどの構文であり、C#では使いません。
6-3. セミコロンをif文の直後に付けてしまうミス
if文の直後にセミコロン;を付けてしまうと、意図しない動きになることがあります。
間違った例です。
C#int score = 50;
if (score >= 60);
{
Console.WriteLine("合格です");
}
このコードでは、if文の直後に;があるため、if文の中身が空になります。
その結果、後ろのブロックはif文とは関係なく実行されてしまいます。
正しくは次のように書きます。
C#int score = 50;
if (score >= 60)
{
Console.WriteLine("合格です");
}
if文の条件式の直後には、基本的にセミコロンを書きません。
6-4. 中かっこの位置や対応がずれるミス
中かっこ{}の対応がずれると、コンパイルエラーや意図しない処理の原因になります。
間違った例です。
C#if (score >= 60)
{
Console.WriteLine("合格です");
else
{
Console.WriteLine("不合格です");
}
このコードでは、if文の中かっこが閉じられていません。
正しくは次のように書きます。
C#if (score >= 60)
{
Console.WriteLine("合格です");
}
else
{
Console.WriteLine("不合格です");
}
エディタの自動整形機能を使うと、中かっこの対応ミスに気づきやすくなります。
6-5. 文字列比較・null判定で起きやすいミス
文字列を比較するときは、==を使えます。
C#string name = "Taro";
if (name == "Taro")
{
Console.WriteLine("こんにちは、Taroさん");
}
ただし、ユーザー入力では大文字・小文字、余分な空白、nullに注意が必要です。
C#string input = Console.ReadLine();
if (input == "yes")
{
Console.WriteLine("続行します");
}
この場合、ユーザーが"YES"や" yes "と入力すると一致しません。
大文字・小文字を無視して比較したい場合は、次のように書けます。
C#string input = Console.ReadLine();
if (string.Equals(input, "yes", StringComparison.OrdinalIgnoreCase))
{
Console.WriteLine("続行します");
}
nullや空文字をチェックしたい場合は、string.IsNullOrEmptyやstring.IsNullOrWhiteSpaceを使うと安全です。
C#string input = Console.ReadLine();
if (string.IsNullOrWhiteSpace(input))
{
Console.WriteLine("入力が空です");
}
else
{
Console.WriteLine("入力内容: " + input);
}
7. ネストしたif文の書き方と読みやすくするコツ
if文の中にさらにif文を書くことを、ネストといいます。
ネストは便利ですが、深くなりすぎると読みづらくなります。
7-1. if文の中にif文を書くネストとは
ネストしたif文の例です。
C#bool isLoggedIn = true;
bool isAdmin = true;
if (isLoggedIn)
{
if (isAdmin)
{
Console.WriteLine("管理者ページを表示します");
}
}
このコードでは、ログインしていて、さらに管理者である場合だけ「管理者ページを表示します」と表示されます。
同じ内容は、&&を使って次のようにも書けます。
C#if (isLoggedIn && isAdmin)
{
Console.WriteLine("管理者ページを表示します");
}
条件が単純なら、ネストせずに論理演算子でまとめたほうが読みやすいことがあります。
7-2. ネストが深いコードの問題点
ネストが深いコードは、どの条件の中にどの処理があるのかがわかりにくくなります。
C#if (user != null)
{
if (user.IsActive)
{
if (user.HasPermission)
{
Console.WriteLine("処理を実行します");
}
}
}
このようなコードは、条件が増えるほど右に寄っていき、読みづらくなります。
また、条件を追加・変更するときにミスが起きやすくなります。
7-3. 条件を先に除外する書き方
ネストを浅くする方法のひとつが、例外ケースを先に除外する書き方です。
C#if (user == null)
{
Console.WriteLine("ユーザーが存在しません");
return;
}
if (!user.IsActive)
{
Console.WriteLine("ユーザーが無効です");
return;
}
if (!user.HasPermission)
{
Console.WriteLine("権限がありません");
return;
}
Console.WriteLine("処理を実行します");
このように、処理できない条件を先に返すことで、メインの処理を読みやすくできます。
これは「早期リターン」と呼ばれる書き方です。
7-4. 複雑な条件式を変数やメソッドに分ける方法
条件式が長くなった場合は、bool型の変数に分けると読みやすくなります。
C#bool isAdult = age >= 18;
bool hasValidTicket = ticket != null && ticket.IsValid;
bool canEnter = isAdult && hasValidTicket;
if (canEnter)
{
Console.WriteLine("入場できます");
}
さらに、条件判定をメソッドに分けることもできます。
C#bool CanEnter(int age, Ticket ticket)
{
return age >= 18 && ticket != null && ticket.IsValid;
}
if (CanEnter(age, ticket))
{
Console.WriteLine("入場できます");
}
メソッド名を見るだけで条件の意味がわかるため、コード全体が読みやすくなります。
8. if文・else文の実践サンプルコード
ここでは、C#のif文・else文を使った実践的なサンプルコードを紹介します。
基本構文を覚えたら、実際の場面に近いコードで理解を深めましょう。
8-1. 数値が偶数か奇数かを判定する
偶数か奇数かを判定するには、剰余演算子%を使います。
C#int number = 7;
if (number % 2 == 0)
{
Console.WriteLine("偶数です");
}
else
{
Console.WriteLine("奇数です");
}
number % 2は、numberを2で割った余りです。
余りが0なら偶数、そうでなければ奇数です。
8-2. 入力された年齢で成人判定をする
ユーザーから入力された年齢を使って成人判定をする例です。
C#Console.Write("年齢を入力してください: ");
string input = Console.ReadLine();
int age = int.Parse(input);
if (age >= 18)
{
Console.WriteLine("成人です");
}
else
{
Console.WriteLine("未成年です");
}
ただし、int.Parseは数値以外の文字列が入力されるとエラーになります。
実践では、int.TryParseを使うと安全です。
C#Console.Write("年齢を入力してください: ");
string input = Console.ReadLine();
if (int.TryParse(input, out int age))
{
if (age >= 18)
{
Console.WriteLine("成人です");
}
else
{
Console.WriteLine("未成年です");
}
}
else
{
Console.WriteLine("数値を入力してください");
}
8-3. 点数に応じて成績を表示する
点数に応じて成績を表示する例です。
C#int score = 82;
if (score >= 90)
{
Console.WriteLine("A");
}
else if (score >= 80)
{
Console.WriteLine("B");
}
else if (score >= 70)
{
Console.WriteLine("C");
}
else if (score >= 60)
{
Console.WriteLine("D");
}
else
{
Console.WriteLine("F");
}
点数の高い条件から順番に書くことで、正しく判定できます。
8-4. ログイン状態によって表示内容を切り替える
ログインしているかどうかで表示内容を変える例です。
C#bool isLoggedIn = true;
string userName = "Yamada";
if (isLoggedIn)
{
Console.WriteLine($"{userName}さん、ようこそ");
}
else
{
Console.WriteLine("ログインしてください");
}
ログイン状態はWebアプリや業務システムなどでよく使われる条件です。
管理者かどうかも判定する場合は、次のように書けます。
C#bool isLoggedIn = true;
bool isAdmin = false;
if (isLoggedIn && isAdmin)
{
Console.WriteLine("管理者メニューを表示します");
}
else if (isLoggedIn)
{
Console.WriteLine("通常メニューを表示します");
}
else
{
Console.WriteLine("ログインしてください");
}
8-5. nullや空文字をチェックしてエラーを防ぐ
C#では、nullの可能性がある変数をそのまま使うとエラーになることがあります。
たとえば、次のコードはnameがnullの場合に問題が起きます。
C#string name = null;
if (name.Length > 0)
{
Console.WriteLine(name);
}
nameがnullのときにname.Lengthへアクセスすると、NullReferenceExceptionが発生します。
安全にチェックするには、次のようにします。
C#string name = null;
if (!string.IsNullOrEmpty(name))
{
Console.WriteLine(name);
}
else
{
Console.WriteLine("名前が入力されていません");
}
空白だけの文字列も無効にしたい場合は、string.IsNullOrWhiteSpaceを使います。
C#string name = " ";
if (!string.IsNullOrWhiteSpace(name))
{
Console.WriteLine(name);
}
else
{
Console.WriteLine("名前が入力されていません");
}
9. if文とswitch文・三項演算子の使い分け
C#には、if文以外にも条件分岐を書く方法があります。
代表的なものが、switch文と三項演算子です。
それぞれ得意な場面が違うため、状況に応じて使い分けましょう。
9-1. 条件が複雑ならif文が向いている
複数の条件を組み合わせる場合や、範囲を判定する場合はif文が向いています。
C#if (age >= 18 && hasTicket && !isBlocked)
{
Console.WriteLine("入場できます");
}
このように、年齢、チケットの有無、ブロック状態など、複数の条件を組み合わせる場合はif文が自然です。
範囲判定にもif文が向いています。
C#if (score >= 80)
{
Console.WriteLine("高得点です");
}
else if (score >= 60)
{
Console.WriteLine("合格です");
}
else
{
Console.WriteLine("不合格です");
}
9-2. 値ごとの分岐が多いならswitch文を検討する
1つの値に対して分岐が多い場合は、switch文を使うと読みやすくなることがあります。
C#string role = "admin";
switch (role)
{
case "admin":
Console.WriteLine("管理者です");
break;
case "editor":
Console.WriteLine("編集者です");
break;
case "viewer":
Console.WriteLine("閲覧者です");
break;
default:
Console.WriteLine("権限が不明です");
break;
}
roleの値によって処理を分けるようなケースでは、if else文を連続して書くよりもswitch文のほうが整理しやすい場合があります。
9-3. 短い代入なら三項演算子も使える
三項演算子は、条件によって値を切り替えて代入したいときに使えます。
C#int score = 75;
string result = score >= 60 ? "合格" : "不合格";
Console.WriteLine(result);
これは、次のif else文と同じ意味です。
C#string result;
if (score >= 60)
{
result = "合格";
}
else
{
result = "不合格";
}
三項演算子は短く書ける反面、複雑な条件に使うと読みにくくなります。
C#string message = age >= 18 ? "成人" : "未成年";
この程度の短い代入で使うのがおすすめです。
9-4. 初心者はまずif文で書いてから整理する
初心者のうちは、まずif文でわかりやすく書くのがおすすめです。
if文で処理の流れを理解してから、必要に応じてswitch文や三項演算子に整理するとよいでしょう。
たとえば、最初は次のように書きます。
C#string message;
if (isLoggedIn)
{
message = "ログイン済みです";
}
else
{
message = "ログインしてください";
}
慣れてきたら、短い代入であれば三項演算子にできます。
C#string message = isLoggedIn ? "ログイン済みです" : "ログインしてください";
読みやすさを優先し、無理に短く書こうとしないことが大切です。
10. C#のif文・else文を正しく書くためのベストプラクティス
if文・else文は自由に書けるぶん、書き方によって読みやすさや保守性が大きく変わります。
ここでは、実務でも意識したいベストプラクティスを紹介します。
10-1. 条件式は読みやすくシンプルにする
条件式が長すぎると、何を判定しているのかわかりにくくなります。
C#if (age >= 18 && hasTicket && !isBlocked && user != null && user.IsActive)
{
Console.WriteLine("入場できます");
}
このような場合は、条件を変数に分けると読みやすくなります。
C#bool isAdult = age >= 18;
bool canUseTicket = hasTicket;
bool isUserValid = user != null && user.IsActive;
bool canEnter = isAdult && canUseTicket && !isBlocked && isUserValid;
if (canEnter)
{
Console.WriteLine("入場できます");
}
条件の意味が名前でわかるようになるため、コードを読む人に親切です。
10-2. マジックナンバーを定数にする
条件式に直接書かれた数値は、意味がわかりにくいことがあります。
C#if (score >= 60)
{
Console.WriteLine("合格です");
}
この60が合格点だとすぐにわかる場合もありますが、実務では定数にしたほうが管理しやすくなります。
C#const int PassingScore = 60;
if (score >= PassingScore)
{
Console.WriteLine("合格です");
}
定数名を見るだけで、数値の意味がわかります。
また、合格点が変わった場合も、定数の値を変更するだけで済みます。
10-3. 例外ケースを先に処理する
処理できない条件を先に除外すると、メインの処理が読みやすくなります。
C#if (string.IsNullOrWhiteSpace(userName))
{
Console.WriteLine("ユーザー名を入力してください");
return;
}
Console.WriteLine($"{userName}さん、ようこそ");
このように、エラーや例外ケースを先に処理することで、後続のコードがすっきりします。
ネストを深くしないためにも有効な書き方です。
10-4. インデントを整えて処理範囲を明確にする
if文では、インデントを整えることが重要です。
C#if (score >= 60)
{
Console.WriteLine("合格です");
}
else
{
Console.WriteLine("不合格です");
}
インデントが乱れていると、どの処理がif文やelse文の中にあるのかがわかりにくくなります。
中かっこの位置やインデントは、開発チームのルールに合わせて統一しましょう。
Visual StudioやVisual Studio Codeの自動整形機能を使うと、インデントを整えやすくなります。
10-5. テストしやすい条件分岐を書く
条件分岐を書くときは、テストしやすさも意識しましょう。
たとえば、成績判定のロジックを直接画面表示の中に書くと、テストしにくくなります。
C#if (score >= 90)
{
Console.WriteLine("A");
}
else if (score >= 80)
{
Console.WriteLine("B");
}
else
{
Console.WriteLine("C");
}
判定部分をメソッドに分けると、テストしやすくなります。
C#string GetGrade(int score)
{
if (score >= 90)
{
return "A";
}
else if (score >= 80)
{
return "B";
}
else
{
return "C";
}
}
Console.WriteLine(GetGrade(85));
このように、条件分岐の結果を返すメソッドにしておくと、さまざまな入力値で確認しやすくなります。
11. C#のif文・else文に関するよくある質問
ここでは、C#のif文・else文について初心者が疑問に思いやすいポイントをまとめます。
11-1. C#にif then elseはある?
C#にif then elseという構文はありません。
C#ではthenを書かず、次のように書きます。
C#if (condition)
{
// trueのときの処理
}
else
{
// falseのときの処理
}
thenを使うのはVisual Basicなどの構文です。
C#でif (condition) thenのように書くとコンパイルエラーになります。
「c# if then else」と検索している場合は、C#ではthenを使わないと覚えておきましょう。
11-2. else ifとelseの違いは?
else ifは、追加の条件を判定するときに使います。
C#if (score >= 90)
{
Console.WriteLine("A");
}
else if (score >= 80)
{
Console.WriteLine("B");
}
else
{
Console.WriteLine("C");
}
一方、elseは、どの条件にも当てはまらなかった場合に実行されます。
つまり、else ifには条件式があり、elseには条件式がありません。
11-3. if文の条件式に文字列は直接書ける?
C#のif文の条件式には、bool型の結果が必要です。
そのため、次のように文字列を直接書くことはできません。
C#string name = "Taro";
if (name)
{
Console.WriteLine("名前があります");
}
正しくは、文字列が空でないかどうかを判定します。
C#string name = "Taro";
if (!string.IsNullOrEmpty(name))
{
Console.WriteLine("名前があります");
}
空白だけの文字列も除外したい場合は、string.IsNullOrWhiteSpaceを使います。
C#if (!string.IsNullOrWhiteSpace(name))
{
Console.WriteLine("名前があります");
}
11-4. if文の中かっこは省略してもよい?
C#では、if文の処理が1文だけの場合、中かっこを省略できます。
C#if (score >= 60)
Console.WriteLine("合格です");
ただし、初心者には省略しない書き方をおすすめします。
C#if (score >= 60)
{
Console.WriteLine("合格です");
}
中かっこを省略すると、あとから処理を追加したときにバグが起きやすくなります。
読みやすさと安全性を考えると、基本的には中かっこを書くほうがよいでしょう。
11-5. if文とswitch文はどちらを使うべき?
複雑な条件や範囲判定にはif文が向いています。
C#if (score >= 80 && attendanceRate >= 90)
{
Console.WriteLine("優秀です");
}
一方、1つの値に対する分岐が多い場合はswitch文が向いています。
C#switch (status)
{
case "new":
Console.WriteLine("新規");
break;
case "done":
Console.WriteLine("完了");
break;
default:
Console.WriteLine("不明");
break;
}
初心者はまずif文で書き、分岐が多くなって読みづらいと感じたらswitch文を検討するとよいでしょう。
まとめ
C#のif文・else文は、条件によって処理を切り替えるための基本構文です。
if文は、条件式がtrueのときだけ処理を実行します。else文を使うと、条件がfalseだった場合の処理も書けます。さらに、else if文を使えば、複数の条件を上から順番に判定できます。
C#では、Visual Basicのようなif then else構文は使いません。C#で条件分岐を書くときは、if (条件式) { 処理 }の形を使い、thenは書かないようにしましょう。
また、if文の条件式にはbool型の結果が必要です。数値や文字列をそのまま条件式に書くのではなく、score >= 60や!string.IsNullOrWhiteSpace(name)のように、trueまたはfalseになる式を書きます。
初心者がつまずきやすいポイントとして、=と==の間違い、thenを書いてしまうミス、if文の直後にセミコロンを付けるミス、中かっこの対応ミスなどがあります。これらは、基本構文を正しく理解し、中かっこやインデントを丁寧に書くことで防ぎやすくなります。
実務では、条件式をシンプルにする、マジックナンバーを定数にする、例外ケースを先に処理する、複雑な条件を変数やメソッドに分けるといった工夫が大切です。
C#のif文・else文は、プログラミングの基礎でありながら、実践でも頻繁に使われる重要な構文です。まずは基本形をしっかり覚え、簡単な条件分岐から少しずつ練習していきましょう。

