C# サンプル集 |
Visual Basic 中学校 > C# サンプル集 > C# サンプル集目次 >
if を使用した条件判断
2023/1/22
→ Visual Basic のサンプルに切り替える → Python のサンプルに切り替える
目次
- 変数 value の値が 5 なら、処理を実行する
- 変数 value の値が "こんにちは" なら、処理を実行する
- 変数 value の値が true なら、処理を実行する
- 参考:関数のような条件判断(三項条件演算子 ? :)
- 条件が成立していないなら、別の処理を実行する。(else)
- if の処理は書かないで、elseの処理だけ書く
- 複数の条件に応じてそれぞれ別の処理を実行する (else if)
- 変数 value の値が 5 ではないなら、処理を実行する
- 条件を反転させる (!)
- x == 5 で かつ y == 8 なら、処理を実行する (&&)
- x == 5 か または y == 8 なら、処理を実行する (||)
- x が 5 でなく、8 でもないなら、処理を実行する
- x が 5以上なら、処理を実行する (>=)
- x が 5より大きいなら、処理を実行する (>)
- x が 5以下なら、処理を実行する (<=)
- x が 5より小さいなら、処理を実行する (<)
- x が 5 ~ 12 の間なら、処理を実行する
- x と y が同じインスタンスなら、処理を実行する
- Listの要素が同じなら、処理を実行する
- 文字列に "A" を含むなら、処理を実行する
- 文字列が "ベルギー" か "オランダ" か "ルクセンブルグ" なら、処理を実行する
- 文字列が "徳川家康" か "徳川家光" なら、処理を実行する(正規表現)
- 文字列が 0文字(=空文字)なら、処理を実行する
- 文字列が null か 0文字(=空文字)なら、処理を実行する
- 文字列が null か 0文字(=空文字)か、スペースのみなら、処理を実行する
- 文字列が "france" なら大文字でも小文字でも、処理を実行する
- 文字列が "リンゴ" なら ひらがな でも カタカナ でも、処理を実行する
- 変数が null なら、処理を実行する
- 変数が null ではないなら、処理を実行する
- 変数が指定した型なら、処理を実行する (is)
- 変数が指定した型なら、型変換して、処理を実行する (is)
- 変数が指定した型で、プロパティも一致すれば、処理を実行する (is)
- 変数が指定した型でなければ、処理を実行する (is not)
- 条件判断と同時に変数に代入する
変数 value の値が 5 なら、処理を実行する
int value = 5;
if (value == 5)
{
System.Diagnostics.Debug.WriteLine("valueは5です。"); //←これが表示されます。
}
これでもできます。
int value = 5;
if (value == 5)
System.Diagnostics.Debug.WriteLine("valueは5です。"); //←これが表示されます。
メモ:実行する処理が1行だけの場合 { } は不要です。
これでもできます。
int value = 5;
if (value == 5) System.Diagnostics.Debug.WriteLine("valueは5です。"); //←これが表示されます。
これでもできます。
int value = 5;
if (value is 5)
{
System.Diagnostics.Debug.WriteLine("valueは5です。"); //←これが表示されます。
}
変数 value の値が "こんにちは" なら、処理を実行する
string value = "こんにちは";
if (value == "こんにちは")
{
System.Diagnostics.Debug.WriteLine("valueは「こんにちは」です。"); //←これが表示されます。
}
変数 value の値が true なら、処理を実行する
bool value = true;
if (value)
{
System.Diagnostics.Debug.WriteLine("valueはtrueです。"); //←これが表示されます。
}
メモ:if (value == true)と書いても同じです。
参考:関数のような条件判断(三項条件演算子 ? :)
int value = 5;
string result = value == 5 ? "Fiveです。" : "Fiveではありません。";
System.Diagnostics.Debug.WriteLine(result);
条件が成立していないなら、別の処理を実行する。(else)
int value = 123;
if (value == 5)
{
System.Diagnostics.Debug.WriteLine("valueは5です。");
}
else
{
System.Diagnostics.Debug.WriteLine("valueは5ではありません。"); //←これが表示されます。
}
これでもできます。
int value = 123;
if (value == 5)
System.Diagnostics.Debug.WriteLine("valueは5です。");
else
System.Diagnostics.Debug.WriteLine("valueは5ではありません。"); //←これが表示されます。
メモ:実行する処理が1行だけの場合 { } は不要です。
if の処理は書かないで、elseの処理だけ書く
int value = 123;
if (value == 5)
{
//何もしません。このコメントを記述する必要はありません。
}
else
{
System.Diagnostics.Debug.WriteLine("valueは5ではありません。"); //←これが表示されます。
}
複数の条件に応じてそれぞれ別の処理を実行する (else if)
int value = 66;
if (value == 5)
{
System.Diagnostics.Debug.WriteLine("valueは5です。");
}
else if (value > 10)
{
System.Diagnostics.Debug.WriteLine("valueは10より大きいです。"); //←これが表示されます。
}
else if (value > 50)
{
// 10より大きい場合、1つの上のelse ifが実行されるので、このelse ifの処理はvalueの値に関係なく絶対に実行されません。
System.Diagnostics.Debug.WriteLine("valueは50より大きいです。");
}
else
{
System.Diagnostics.Debug.WriteLine("valueは 5 ではないし、10より大きくもないです。");
}
メモ:else if を使う場合、if よりも switch式やswitchステートメントの方が適しているかもしれません。
変数 value の値が 5 ではないなら、処理を実行する
int value = 123;
if (value != 5)
{
System.Diagnostics.Debug.WriteLine("valueは5ではありません。"); //←これが表示されます。
}
これでもできます。
int value = 123;
if (value is not 5)
{
System.Diagnostics.Debug.WriteLine("valueは5ではありません。"); //←これが表示されます。
}
条件を反転させる (!)
条件式に ! を付けると結果が判定します。次の例は、OSがLinuxでなければメッセージを出力します。
if (!System.OperatingSystem.IsLinux())
{
System.Diagnostics.Debug.WriteLine("実行環境はLinuxではありません。"); //←これが出力されます。
}
メモ:この例では、if (System.OperatingSystem.IsLinux() == false) と書いても同じです。
x == 5 で かつ y == 8 なら、処理を実行する (&&)
int x = 5;
int y = 8;
if (x == 5 && y == 8)
{
System.Diagnostics.Debug.WriteLine("x は 5 で かつ y は 8 です。"); //←これが表示されます。
}
x == 5 か または y == 8 なら、処理を実行する (||)
int x = 123;
int y = 8;
if (x == 5 || y == 8)
{
System.Diagnostics.Debug.WriteLine("x が 5 か または y が 8 か またはその両方です。"); //←これが表示されます。
}
x が 5 でなく、8 でもないなら、処理を実行する
int x = 123;
if (x != 5 && x != 8)
{
System.Diagnostics.Debug.WriteLine("x が 5 ではないし、8 でもありません。"); //←これが表示されます。
}
これでもできます。
int x = 123;
if (!(x == 5 || x == 8))
{
System.Diagnostics.Debug.WriteLine("x が 5 ではないし、8 でもありません。"); //←これが表示されます。
}
これでもできます。
int x = 123;
if (x is not 5 and not 8)
{
System.Diagnostics.Debug.WriteLine("x が 5 ではないし、8 でもありません。"); //←これが表示されます。
}
x が 5以上なら、処理を実行する (>=)
int x = 78;
if (x >= 5)
{
System.Diagnostics.Debug.WriteLine("x は 5 以上です。"); //←これが表示されます。
}
メモ:「以上」にはその数を含みます。たとえば、5以上の一番小さい数は5です。
x が 5より大きいなら、処理を実行する (>)
int x = 78;
if (x > 5)
{
System.Diagnostics.Debug.WriteLine("x は 5 より大きいです。"); //←これが表示されます。
}
メモ:「より大きい」にはその数を含みません。たとえば、5より大きい一番小さな整数は6です。
x が 5以下なら、処理を実行する (<=)
int x = -45;
if (x <= 5)
{
System.Diagnostics.Debug.WriteLine("x は 5 以下です。"); //←これが表示されます。
}
メモ:「以下」にはその数を含みます。たとえば、5以下の一番大きい数は5です。
x が 5より小さいなら、処理を実行する (<)
int x = -45;
if (x < 5)
{
System.Diagnostics.Debug.WriteLine("x は 5 より小さいです。"); //←これが表示されます。
}
メモ:「より小さい」にはその数を含みません。たとえば、5より小さい一番大きな整数は4です。
x が 5 ~ 12 の間なら、処理を実行する
int x = 12;
if (x >= 5 && x <= 12)
{
System.Diagnostics.Debug.WriteLine("x は 5 ~ 12 の間です。"); //←これが表示されます。
}
これでもできます。
int x = 12;
if (x is >= 5 and <= 12)
{
System.Diagnostics.Debug.WriteLine("x は 5 ~ 12 の間です。"); //←これが表示されます。
}
x と y が同じインスタンスなら、処理を実行する
var x = new List<int>() {1, 2, 3};
var y = new List<int>() {1, 2, 3};
var z = x;
if (x == y)
{
//これは表示されません。 x と y は内容が同じでも別のインスタンスです。
System.Diagnostics.Debug.WriteLine("x と y は同じインスタンスです。");
}
if (x == z)
{
//これが表示されます。
System.Diagnostics.Debug.WriteLine("x と z は同じインスタンスです。");
}
Listの要素が同じなら、処理を実行する
var x = new List<int>() {1, 2, 3};
var y = new List<int>() {1, 2, 3};
var z = x;
if (x.SequenceEqual(y))
{
//これは表示されます。
System.Diagnostics.Debug.WriteLine("x と y の要素は同じです。");
}
if (x.SequenceEqual(z))
{
//これも表示されます。
System.Diagnostics.Debug.WriteLine("x と z の要素は同じです。");
}
メモ:SequecneEqual での比較では、要素の順序も一致している必要があります。
文字列に "A" を含むなら、処理を実行する
string value = "ITALIA";
if (value.Contains("A"))
{
System.Diagnostics.Debug.WriteLine("ITALIA には A が含まれています。"); //←これが表示されます。
}
文字列が "ベルギー" か "オランダ" か "ルクセンブルグ" なら、処理を実行する
string value = "オランダ";
if (value is "ベルギー" or "オランダ" or "ルクセンブルグ")
{
System.Diagnostics.Debug.WriteLine("ベネルクスです。"); //←これが表示されます。
}
これでもできます。
string value = "オランダ";
if (value == "ベルギー" || value == "オランダ" || value == "ルクセンブルグ")
{
System.Diagnostics.Debug.WriteLine("ベネルクスです。"); //←これが表示されます。
}
これでもできます。
string value = "オランダ";
if (new string[] {"ベルギー", "オランダ", "ルクセンブルグ"}.Contains(value))
{
System.Diagnostics.Debug.WriteLine("ベネルクスです。"); //←これが表示されます。
}
これでもできます。if ではないですが。
string value = "オランダ";
switch (value)
{
case "ベルギー" or "オランダ" or "ルクセンブルグ":
System.Diagnostics.Debug.WriteLine("ベネルクスです。"); //←これが表示されます。
break;
}
文字列が "徳川家康" か "徳川家光" なら、処理を実行する(正規表現)
string value = "徳川家光";
if (System.Text.RegularExpressions.Regex.IsMatch(value, "^徳川家[康光]$"))
{
System.Diagnostics.Debug.WriteLine("徳川家康または徳川家光です。"); //←これが表示されます。
}
メモ:Regexクラスは正規表現でのパターンマッチングを行います。
文字列が 0文字(=空文字)なら、処理を実行する
string value = ""; // 長さ 0 の文字列。「空文字」とも呼びます。
if (value == "")
{
System.Diagnostics.Debug.WriteLine("文字列は空文字です。"); //←これが表示されます。
}
メモ:value が null のときはメッセージを出力しません。
文字列が null か 0文字(=空文字)なら、処理を実行する
string value = "";
//string value = null; //← null で試したい場合
if (string.IsNullOrEmpty(value))
{
//これが表示されます。
System.Diagnostics.Debug.WriteLine("文字列はnullか空文字です。");
}
if (! string.IsNullOrEmpty(value))
{
//この例ではこれは表示されません。 value は空文字だからです。
System.Diagnostics.Debug.WriteLine("文字列には何か1文字以上あります。※スペースも1文字とみなします。");
}
文字列が null か 0文字(=空文字)か、スペースのみなら、処理を実行する
string value = " "; //3つのスペース
if (string.IsNullOrWhiteSpace(value))
{
System.Diagnostics.Debug.WriteLine("文字列はnullか空文字か1つ以上のスペースです。"); //←これが表示されます。
}
文字列が "france" なら大文字でも小文字でも、処理を実行する
string value = "frANCE";
if (value.Equals("France", StringComparison.OrdinalIgnoreCase))
{
System.Diagnostics.Debug.WriteLine("大文字小文字を無視すると文字列は France と等価です。");
}
メモ:この例では、ドイツ語のエスツェット "ß" は "ss" と等しいとはみなされません(ドイツ人は日常生活でこれを等しいと認識しているようです)。このような言語文化的な同一性への対応は文字種によって異なります。.NETのグローバリゼーション機能でこのような比較ができるものもありますし、できないものもあります。
ドイツ語のエスツェット (ß) と ss を等しいとみなすような比較は下記でできます。IgnoreNonSpaceがポイントです。
string value = "Fleiß";
var gc = StringComparer.Create(CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace);
if (gc.Equals(value, "Fleiss"))
{
System.Diagnostics.Debug.WriteLine("言語特性を考慮すると Fleiß と Fleiss は等価です。");
}
文字列が "リンゴ" なら ひらがな でも カタカナ でも、処理を実行する
string value = "リんゴ";
if (Umayadia.Kana.KanaConverter.ToKatakana(value) == "リンゴ")
{
System.Diagnostics.Debug.WriteLine("ひらがな・カタカナを無視すると文字列は リンゴ と等価です。");
}
メモ:この例を実行するには、NuGetで Kana.NET をインストールする必要があります。→ NuGetでパッケージをインストールする方法
メモ:ひらがなとカタカナを変換したり比較したりできる.NETの標準的な機能はありません。
変数が null なら、処理を実行する
object value = null;
if (value == null)
{
System.Diagnostics.Debug.WriteLine("value は null です。"); //←これが表示されます。
}
変数が null ではないなら、処理を実行する
string value = "OK!";
if (value != null)
{
System.Diagnostics.Debug.WriteLine("value は null ではありません。"); //←これが表示されます。
}
変数が指定した型なら、処理を実行する (is)
この例は、変数 value の値が DateTime 型であるならメッセージを出力します。(メモ参照)
object value = DateTime.Now;
if (value is DateTime)
{
System.Diagnostics.Debug.WriteLine("value は DateTime型 と互換性があります。"); //←これが表示されます。
}
メモ:is 演算子は厳密に型が一致していなくても互換性がある型であれば true を返します。たとえば、基底クラスや実装するインターフェースの型 は true と判断します。わかりやすい例では value is object は value が null でなければ常に true です。
参考:変数 value の値が DateTime 型であるか厳密に判断するには GetType を使用して比較します。
object value = DateTime.Now;
if (value is object)
{
// このメッセージは表示されます。is は 互換性がある型を true と判断するからです。
System.Diagnostics.Debug.WriteLine("value は object型 と互換性があります。");
}
if (value?.GetType() == typeof(object))
{
// このメッセージは表示されません。GetType と typeof を組み合わせた比較は厳密に判断するからです。
System.Diagnostics.Debug.WriteLine("value は object型 です。");
}
if (value is DateTime)
{
// このメッセージは表示されます。
System.Diagnostics.Debug.WriteLine("value は DateTime型 と互換性があります。");
}
if (value?.GetType() == typeof(DateTime))
{
// このメッセージは表示されます。
System.Diagnostics.Debug.WriteLine("value は DateTime型 です。");
}
変数が指定した型なら、型変換して、処理を実行する (is)
この例は、変数 value が DateTime 型であるならメッセージを出力します。(メモ参照)
object value = DateTime.Now;
if (value is DateTime dt)
{
System.Diagnostics.Debug.WriteLine($"value は {dt.Month}月{dt.Day}日です。"); //←これが表示されます。
}
メモ:is 演算子は厳密に型が一致していなくても互換性がある型であれば true を返します。たとえば、基底クラスや実装するインターフェースの型 は true と判断します。わかりやすい例では value is object は value が null でなければ常に true です。
変数が指定した型で、プロパティも一致すれば、処理を実行する (is)
この例は、変数 value が DateTime 型でDayプロパティが1、Hourプロパティが12以上ならばメッセージを出力します。
object value = new DateTime(2024, 2, 1, 15, 0, 0);
if (value is DateTime { Day:1, Hour:>=12 })
{
//これが出力されます。valueはDayが1でHourが15だからです。
System.Diagnostics.Debug.WriteLine("月の初めの日の午後ですね。");
}
変数が指定した型でなければ、処理を実行する (is not)
この例は、変数 value の値が DateTime 型と互換性がなければメッセージを出力します。
object value = "OK!";
if (value is not DateTime)
{
System.Diagnostics.Debug.WriteLine("value は DateTime型 と互換性がありません。"); //←これが表示されます。
}
メモ:この例は 変数が null の場合にもメッセージを出力します。
条件判断と同時に変数に代入する
この例は、1~6のランダムな数値を生成し、数値によってメッセージを変えます。メッセージには生成された数値を含みます。
int i = 0;
if ((i = Random.Shared.Next(1, 7)) >= 4)
{
System.Diagnostics.Debug.WriteLine($"高い数 {i} が生成されました。");
}
else
{
System.Diagnostics.Debug.WriteLine($"低い数 {i} が生成されました。");
}