「C Sharp」の版間の差分

ナビゲーションに移動 検索に移動
3,700 バイト追加 、 1 か月前
(→‎record型: ※ .net core 用のコード)
 
=== 条件分岐 ===
=== if文 ===
if文(「イフぶん」と読む)をもちいた処理により、直後の条件を満たした場合にだけブロック内の処理を実行させることができます。ここでいう「ブロック」とは、if文の直後の<code>{</code>から次の<code>}</code>までにある、ひとかたまり(英語でブロック)の処理のことです。
 
C#のif文の記法や使い方は、標準C言語やC++とほぼ同じです。
 
:<syntaxhighlight lang="csharp">
using System;
 
public class Hello {
public static void Main(string[] args) {
 
int a =7;
 
if (a > 5) {
Console.WriteLine("5より大きい");
}
if (a <= 5) {
Console.WriteLine("5以下です");
}
}
}
</syntaxhighlight>
; 実行結果 :<syntaxhighlight lang="text">
5より大きい
</syntaxhighlight>
 
言葉で説明するのは難しいので、上記コードを手元の実行環境にコピーして、aの値を色々と変えてみて実験してみましょう。
 
構文としては、
:<syntaxhighlight lang="csharp">
if (条件) {
// 条件が満たされた場合にこのブロックが実行される
}
</syntaxhighlight>
です。
 
if文のあとに<code>else if</code>を使うと、直前のif文が実行されなかった場合にだけ条件判定させることができます。下記のように使います。
 
なお、if のない単独の<code>else</code> は、単に前の条件が満たされなかっただけでもブロック内が実行されます。
 
:<syntaxhighlight lang="csharp">
using System;
 
public class Hello {
public static void Main(string[] args) {
 
int a = +2;
 
if (a > 5) {
Console.WriteLine("5より大きい");
}
else if (a >= 0 && a <= 5) {
Console.WriteLine("0以上かつ5以下です");
}
else {
Console.WriteLine("0未満です");
}
}
}
</syntaxhighlight>
; 実行結果 :<syntaxhighlight lang="text">
0以上かつ5以下です
</syntaxhighlight>
 
else if で判定が行われる条件として直前のif文が満たされなかった場合でなければなりません。なので、もし直前のif文が満たされるように条件を書き換えると、else if は実行されなくなります。試してみましょう。
 
下記コードは、やや条件分岐のバグを含んでいます。
 
:<syntaxhighlight lang="csharp">
// 条件分岐にバグあり
using System;
 
public class Hello {
public static void Main(string[] args) {
 
int a = +2;
 
if (a < 5) { // 不等号を逆に書き換えた
Console.WriteLine("5より大きい");
}
else if (a >= 0 && a <= 5) {
Console.WriteLine("0以上かつ5以下です");
}
else {
Console.WriteLine("0未満です");
}
}
}
</syntaxhighlight>
; 実行結果 :<syntaxhighlight lang="text">
5より小さい
</syntaxhighlight>
 
「0以上かつ5以下」という条件は満たしているのにもかかわらず、else if の直前のif文が満たされているので、else if のブロックは実行されていません。
 
この例のように、else if は、なれずに使うとバグにつながります。elseの仕組みを正しく理解して、どうしても必要な場合にだけ else if や else を使いましょう。
 
当然ですが、直前にif がないのに else if を使うとエラーになります。また、直前が else で終わってるのに続けてelse if を使ってもエラーになります。また、if と else や else if のあいだに <code>Console.WriteLine(a);</code>など別の命令があってもエラーになります。
 
==== 単なるswitch文 ====
まず、switch文やenumはC#では下記のように使う。.net core 6 で下記コードが動くので、C#10 に対応しているはず。
Saturday
}
 
</syntaxhighlight>
; 実行結果 :<syntaxhighlight lang="text">
23,094

回編集

案内メニュー