C#を実行してみよう
C#はWeb、デスクトップ、クラウド、ゲームなどで使われる型安全な言語です。.NET SDKを導入し、作業用フォルダーで次を実行します。
dotnet new console
dotnet runConsole.WriteLine("こんにちは、C#!");こんにちは、C#!現在のテンプレートは、定型的なclass ProgramとMainを省略したトップレベルステートメントを使います。
変数とデータ型
型を明示するか、varで初期値から推論します。一度決めた変数の型は変わりません。
string name = "Mity";
int age = 20;
double height = 170.5;
bool isStudent = true;
decimal price = 198.50m;
Console.WriteLine($"{name}さん {age}歳 {height:F1}cm");
Console.WriteLine($"学生: {isStudent}, 価格: {price}円");Mityさん 20歳 170.5cm
学生: True, 価格: 198.50円mを付けます。実務では定められた税と丸めのルールに従います。入力と型変換
Console.ReadLine()は文字列またはnullを返します。string?の?は、文字列だけでなくnullも入り得ることを表すnull許容参照型の注釈です。初心者の入力処理では、例外を出さないTryParseが便利です。
Console.Write("年齢: ");
string? text = Console.ReadLine();
if (int.TryParse(text, out int age))
{
Console.WriteLine($"来年は{age + 1}歳です");
}
else
{
Console.WriteLine("整数で入力してください");
}年齢: 20
来年は21歳です演算子と条件分岐
比較に== != < > <= >=、論理演算に&& || !を使います。
int score = 82;
string result;
if (score >= 80) result = "合格(よくできました)";
else if (score >= 60) result = "合格";
else result = "再挑戦";
Console.WriteLine(result);合格(よくできました)繰り返し
回数が決まるときはfor、コレクションを順に読むときはforeachが分かりやすい書き方です。
for (int i = 1; i <= 3; i++)
{
Console.WriteLine($"{i}回目");
}1回目
2回目
3回目breakは終了、continueは今回のみ飛ばします。配列、List、Dictionary
配列は長さ固定、List<T>は追加・削除できる並び、Dictionary<TKey,TValue>はキーと値の組です。
var fruits = new List<string> { "りんご", "みかん" };
fruits.Add("ぶどう");
var scores = new Dictionary<string, int> { ["Aki"] = 82, ["Mika"] = 91 };
foreach (string fruit in fruits) Console.WriteLine(fruit);
Console.WriteLine($"Mika: {scores["Mika"]}点");りんご
みかん
ぶどう
Mika: 91点存在しないキーはTryGetValueで確認すると安全です。
メソッド
戻り値の型、名前、引数の順に定義します。
static int CalculateTotal(int price, int count)
{
return price * count;
}
int total = CalculateTotal(500, 3);
Console.WriteLine($"合計: {total}円");合計: 1500円トップレベルのコードで定義するローカル関数は、呼び出しコードより後ろに書いても構いません。
例外処理
ファイル不存在など、想定して対応できる例外をtryとcatchで処理します。
try
{
int number = int.Parse("十");
Console.WriteLine(number);
}
catch (FormatException)
{
Console.WriteLine("数字の形式ではありません");
}数字の形式ではありませんcatch (Exception) { }で全てを無視すると原因が分からなくなります。対応できる例外のみを捕捉します。ファイルの読み書き
File.WriteAllTextとFile.ReadAllTextで小さなテキストを扱えます。
string path = "memo.txt";
File.WriteAllText(path, "C#を学習中\n");
string text = File.ReadAllText(path);
Console.Write(text);C#を学習中大きなファイルはStreamReaderで順に読みます。利用者入力をそのままパスに使わず、IOExceptionやアクセス権限も想定しましょう。
クラスとプロパティ
クラスはデータと操作をまとめた型です。requiredは生成時の設定忘れをコンパイラが検出します。
var product = new Product { Name = "ノート", Price = 180 };
Console.WriteLine(product.Label());
class Product
{
public required string Name { get; init; }
public int Price { get; set; }
public string Label() => $"{Name}: {Price}円";
}ノート: 180円通常はクラス定義を別ファイルに置きます。トップレベルステートメントより後ろに型定義を書きます。
NuGetとテスト
NuGetは.NETのパッケージ管理です。正確なパッケージ名、公開元、ライセンスを確認してから追加します。
dotnet add package PackageName
dotnet list package
dotnet build
dotnet test.csprojと必要なロック情報はGitへ登録しますが、bin/とobj/は通常登録しません。ミニ課題:成績集計
名前と点数を持つStudentクラスを作り、List<Student>から平均点と合格者を表示してください。
- 0〜100以外の点数を受け付けない
- 60点以上を合格とする
- 通常値と0点・100点の境界値をテストする
次に学ぶこと
基礎を終えたら、目的に合わせて.NETの機能とフレームワークへ進みましょう。
- LINQ:コレクションの抽出、並べ替え、集計を宣言的に書く
- ASP.NET Core:WebアプリやWeb APIを作る
- Entity Framework Core:C#のオブジェクトとデータベースを対応させる
- xUnit:自動テストを整理し、変更後の回帰を防ぐ
まずLINQで成績集計の抽出と平均計算を書き換え、xUnitで境界値をテストすると、この講座のコレクションとクラスを発展させられます。
