C#のif文・elseの基本:『もし〜ならA、でなければB』の条件分岐の書き方とサンプル【初心者向け】

条件に応じて処理を分けるif文は、C#で最初に身につけたい基本文法のひとつです。

本稿では「もし〜ならA、でなければB」という最も基本的な形を中心に、比較・論理演算子の使い方、null・空文字の判定、else ifやネストの整理、三項演算子まで、初心者の方にも読みやすくサンプルコードを交えて丁寧に解説します。

C#のif文・elseの基本と条件分岐の書き方

if文の構文とブロック({})の書き方

ifは「条件がtrueならブロック内を実行」します。

ブロックは中括弧{}で囲み、複数行の処理を安全にまとめます。

C#
// 基本のif構文(トップレベル文;.NET 6以降)
int number = 7;

// 条件がtrueならブロック内が実行される
if (number % 2 == 1) // 奇数か?
{
    Console.WriteLine("numberは奇数です");
}

Console.WriteLine("処理は続きます");
実行結果
numberは奇数です
処理は続きます

elseの使い方:「もし〜ならA、でなければB」の基本形

elseはifの条件がfalseだったときの代替処理です。

「もし条件ならA、でなければB」を素直に書けます。

C#
int score = 65;

if (score >= 70)
{
    Console.WriteLine("合格です"); // A
}
else
{
    Console.WriteLine("不合格です"); // B
}
実行結果
不合格です

bool型と条件式の評価の仕組み

C#のif条件は必ずbool(true/false)に評価できる式である必要があります。

C言語のように01などの整数は条件に使えません。

また、条件式は左から右へ評価され、論理演算子&&||は短絡評価(必要な範囲でのみ評価)を行います。

条件式の書き方と比較・論理演算子

比較演算子(==, !=, >, <, >=, <=)の使い方

代表的な比較演算子と意味を一覧にします。

演算子読み方結果
==等しい3 == 3true
!=等しくない3 != 4true
>より大きい5 > 2true
<より小さい2 < 5true
>=以上5 >= 5true
<=以下3 <= 2false

文字列の==は内容の等価比較(大文字小文字は区別)を行います。

用途によってはstring.Equals(a, b, StringComparison.OrdinalIgnoreCase)のように比較方法を指定しましょう。

C#
string a = "Hello";
string b = "hello";

if (a == b)
{
    Console.WriteLine("== では一致");
}
else if (string.Equals(a, b, StringComparison.OrdinalIgnoreCase))
{
    Console.WriteLine("大文字小文字を無視すれば一致");
}
else
{
    Console.WriteLine("一致しません");
}
実行結果
大文字小文字を無視すれば一致

論理演算子(&&, ||, !)で条件を組み合わせる

  • &&(かつ):両方trueのときtrue。左がfalseなら右は評価しない(短絡)。
  • ||(または):どちらかtrueでtrue。左がtrueなら右は評価しない(短絡)。
  • !(否定):trueとfalseを反転。
C#
int age = 20;
bool hasTicket = true;

if (age >= 18 && hasTicket)
{
    Console.WriteLine("入場できます");
}

bool isHoliday = false;
if (isHoliday || age < 12)
{
    Console.WriteLine("割引が適用されます");
}

bool isMember = false;
if (!isMember)
{
    Console.WriteLine("会員登録がおすすめです");
}
実行結果
入場できます
割引が適用されます
会員登録がおすすめです

null/空文字の判定の注意点(string.IsNullOrEmpty など)

文字列の判定でnullや空文字""を区別せず扱いたい場合はstring.IsNullOrEmpty(s)、空白のみ(スペースやタブ)も空として扱いたい場合はstring.IsNullOrWhiteSpace(s)を使います。

C#
string? name1 = null;
string name2 = "";
string name3 = "   "; // 空白のみ

if (string.IsNullOrEmpty(name1)) Console.WriteLine("name1はnullまたは空");
if (string.IsNullOrEmpty(name2)) Console.WriteLine("name2はnullまたは空");
if (string.IsNullOrWhiteSpace(name3)) Console.WriteLine("name3は空白のみ");

// ダメな例:name.Length は null のとき例外になる
string? maybeNull = null;
// if (maybeNull.Length == 0) { ... } // NullReferenceException!
実行結果
name1はnullまたは空
name2はnullまたは空
name3は空白のみ

サンプルコード集:if-elseで書く条件分岐

数値の範囲で分岐する例(年齢・スコア)

年齢で区分けするシンプルな例です。

C#
int age = 68;

if (age < 13)
{
    Console.WriteLine("子ども料金");
}
else if (age < 65) // 13〜64
{
    Console.WriteLine("大人料金");
}
else // 65以上
{
    Console.WriteLine("シニア料金");
}
実行結果
シニア料金

試験スコアで合否と追試を判定する例です。

C#
int score = 58;

if (score >= 70)
{
    Console.WriteLine("合格");
}
else if (score >= 60) // 60〜69
{
    Console.WriteLine("追試");
}
else
{
    Console.WriteLine("不合格");
}
実行結果
不合格

文字列入力のチェック例(空・空白の判定)

ユーザー名入力を確実にチェックします。

C#
string? input = "   "; // ユーザーからの入力を想定

if (string.IsNullOrWhiteSpace(input))
{
    Console.WriteLine("ユーザー名を入力してください");
}
else
{
    Console.WriteLine($"ようこそ、{input}さん");
}
実行結果
ユーザー名を入力してください

複合条件の例(フラグと値の組み合わせ)

会員フラグと購入金額で割引を振り分けます。

C#
bool isMember = true;
decimal purchase = 12000m;

if (isMember && purchase >= 10000m)
{
    Console.WriteLine("会員10%オフ適用");
}
else if (isMember && purchase >= 5000m)
{
    Console.WriteLine("会員5%オフ適用");
}
else if (!isMember && purchase >= 10000m)
{
    Console.WriteLine("非会員3%オフ適用");
}
else
{
    Console.WriteLine("割引なし");
}
実行結果
会員10%オフ適用

else ifとネストの使い分け

else ifで3つ以上の条件を順序よく書く

温度に応じてメッセージを変える例です。

上から順に特定→一般の順で条件を並べると読みやすくなります。

C#
int temp = 31;

if (temp >= 35)
{
    Console.WriteLine("危険な暑さです。外出を控えましょう");
}
else if (temp >= 30)
{
    Console.WriteLine("非常に暑いです。こまめに水分補給を");
}
else if (temp >= 20)
{
    Console.WriteLine("過ごしやすい気温です");
}
else
{
    Console.WriteLine("肌寒いです。上着を持ちましょう");
}
実行結果
非常に暑いです。こまめに水分補給を

深いネストを避けるコツ(ガード節・早期return)

条件が増えるとネストが深くなりがちです。

先に「例外的な条件」を弾くガード節でフラットにします。

C#
// 悪い例:ネストが深い
string? email = "user@example.com";
bool consent = true;

if (email != null)
{
    if (email.Contains("@"))
    {
        if (consent)
        {
            Console.WriteLine("登録処理を行います");
        }
    }
}

// 良い例:早期return(メソッド想定)でガード節を使う
void Register(string? mail, bool agreed)
{
    if (string.IsNullOrWhiteSpace(mail)) { Console.WriteLine("メール未入力"); return; }
    if (!mail.Contains("@")) { Console.WriteLine("メール形式エラー"); return; }
    if (!agreed) { Console.WriteLine("利用規約に同意が必要です"); return; }

    Console.WriteLine("登録処理を行います");
}

Register(email, false);
実行結果
登録処理を行います
利用規約に同意が必要です

三項演算子(?:)で「AかBか」を1行で書く

三項演算子の基本構文と使いどき

「条件がtrueならA、falseならB」を値として選び、そのまま代入や出力に使えるのが三項演算子です。

短い条件分岐に向いています。

C#
int age = 17;
string label = (age >= 18) ? "大人" : "未成年";
Console.WriteLine(label);
実行結果
未成年

if-elseとの違いと可読性のベストプラクティス

三項演算子は「値を選ぶ」のに最適ですが、複数の処理や副作用を伴う場合はif-elseが読みやすいです。

入れ子の三項演算子は可読性が落ちるため避けます。

C#
int score = 82;
// 短いラベル選択には三項演算子で十分
string grade = (score >= 90) ? "A" : (score >= 70) ? "B" : "C";
Console.WriteLine(grade);

// 複雑になり始めたら素直にif-elseへ
if (score >= 90)
{
    Console.WriteLine("成績はA。表彰対象です");
}
else if (score >= 70)
{
    Console.WriteLine("成績はB。よくできました");
}
else
{
    Console.WriteLine("成績はC。復習しましょう");
}
実行結果
B
成績はB。よくできました

よくあるエラー・注意点・まとめ

波かっこ({})省略によるバグを防ぐ

1行だけだからと中括弧を省略すると、行を追加した際に意図せずelseが効かないなどのバグを招きます。

原則として常に{}を付けるのがおすすめです。

C#
int n = 5;

// 危険:将来行を足したときに誤動作しやすい
if (n > 0)
    Console.WriteLine("正の数です"); // ここだけがifの対象
else
    Console.WriteLine("正の数ではありません");

// 安全:常にブロックで囲む
if (n > 0)
{
    Console.WriteLine("正の数です");
}
else
{
    Console.WriteLine("正の数ではありません");
}
実行結果
正の数です
正の数です

代入(=)と比較(==)の取り違えに注意

C#ではif (x = 1)のような整数代入はコンパイルエラーになりますが、bool変数への代入は通ってしまいます。

意図しない代入に注意しましょう。

C#
bool flag = false;

// 悪い例:代入になってしまい、常にtrue
if (flag = true) // コンパイラは警告するが実行は可能
{
    Console.WriteLine("常に実行されてしまう");
}

// 良い例:比較を使うか、そもそも比較を省略
flag = false;
if (flag == true)
{
    Console.WriteLine("trueです");
}
else
{
    Console.WriteLine("falseです");
}

// さらに良い:boolはそのまま評価
flag = false;
if (flag)
{
    Console.WriteLine("trueです");
}
else
{
    Console.WriteLine("falseです");
}
実行結果
常に実行されてしまう
falseです
falseです

条件の順序と短絡評価で安全性と効率を上げる

&&||は左から評価し、結果が確定すれば右側を評価しません。

これを活かして、例外や重い処理を避けましょう。

C#
string? text = null;

// 良い順序:左でnullを弾くので右を評価しない(安全)
if (text != null && text.Length > 0)
{
    Console.WriteLine("テキストあり");
}

// 悪い順序:先にLengthを見るとnullで例外になる
// if (text.Length > 0 && text != null) { ... } // 例外!

// 代替:null条件演算子や便利メソッドを活用
if (!string.IsNullOrEmpty(text))
{
    Console.WriteLine("テキストあり");
}

// 重い判定は後ろに置く
bool HeavyCheck() { Console.WriteLine("重い処理..."); return true; }
bool quick = false;

if (quick && HeavyCheck()) // quickがfalseなのでHeavyCheckは呼ばれない
{
    Console.WriteLine("両方true");
}
実行結果
(何も出力されません)

まとめ

本稿では、C#におけるif文とelseの基本から、比較・論理演算子の使い方、null/空文字の安全な判定、実践的なサンプル、else ifとネストの整理方法、三項演算子の活用、そしてよくある落とし穴までを体系的に解説しました。

ポイントは次のとおりです。

条件式は必ずboolで評価し、比較・論理演算子を正しく使い分けること。

string.IsNullOrEmptyIsNullOrWhiteSpaceで入力の堅牢性を上げること。

else ifで順序を意識しつつ、ガード節でネストを浅く保つこと。

短い分岐は三項演算子、複雑な処理はif-elseで読みやすく。

最後に、中括弧の省略や===の取り違え、短絡評価の順序には常に注意しましょう。

これらを意識すれば、「もし〜ならA、でなければB」を起点に、堅牢で読みやすい条件分岐が書けるようになります。

クラウドSSLサイトシールは安心の証です。

URLをコピーしました!