C#コード例集|初心者がすぐ使える基本文法・実践サンプル・エラー対策をわかりやすく解説
はじめに
C#を学ぶときは、文法の説明を読むだけでなく、実際のコード例を入力して動かすことが大切です。短いサンプルでも、実行結果を確認しながら変数名や条件を変更すると、プログラムが動く仕組みを理解しやすくなります。
この記事では、C#初心者向けの基本文法から、配列、List、クラス、ファイル操作、JSON、HTTP通信、非同期処理まで、実践で役立つC#コード例をまとめています。コンソールアプリだけでなく、Windows Forms、WPF、ASP.NET Core、データベース、Unityで使えるコード例も紹介します。
コードをコピーするだけで終わらせず、実際に実行し、少しずつ書き換えながら学習を進めてください。
1. C#コード例を探している人がまず知りたい基礎知識
1-1. C#とは?できることと使われる開発分野
C#は、Microsoftが開発したオブジェクト指向プログラミング言語です。.NET上で動作し、さまざまな種類のアプリケーションを開発できます。
代表的な開発分野は次のとおりです。
コンソールアプリ
Windowsデスクトップアプリ
Webアプリ
Web API
クラウドサービス
スマートフォンアプリ
Unityを利用したゲーム
業務システム
バッチ処理や自動化ツール
C#は文法が比較的読みやすく、型チェックや例外処理などの機能も充実しています。小規模な学習用プログラムから、大規模な業務システムまで幅広く利用できる言語です。
1-2. C#コード例を学ぶ前に必要な開発環境
C#コードを実行するには、主に次の環境が必要です。
.NET SDK
コードエディターまたは統合開発環境
ターミナルまたはコマンドプロンプト
初心者には、入力補完やエラー表示、デバッグ機能が充実しているVisual Studioが使いやすいでしょう。軽量な環境を使いたい場合は、Visual Studio Codeと.NET SDKを組み合わせる方法もあります。
インストール後、ターミナルで次のコマンドを実行すると、利用できる.NET SDKのバージョンを確認できます。
dotnet --versionバージョン番号が表示されれば、基本的な準備は完了です。
1-3. Visual Studioと.NET SDKの準備方法
Visual Studioを利用する場合は、インストール時に開発目的に合ったワークロードを選択します。
コンソールアプリや一般的なC#学習では、「.NETデスクトップ開発」を選択しておくと便利です。ASP.NET Coreを学ぶ場合は、「ASP.NETとWeb開発」も追加します。
.NET SDKを使ってコマンドラインからプロジェクトを作成する場合は、次のコマンドを実行します。
dotnet new console -n SampleAppcd SampleAppdotnet rundotnet new consoleはコンソールアプリのひな型を作成するコマンドです。-n SampleAppによって、プロジェクト名をSampleAppに指定しています。
既存プロジェクトをビルドする場合は、次のコマンドを使います。
dotnet build実行する場合は次のとおりです。
dotnet run1-4. C#プログラムの基本構造をコード例で確認
C#のコンソールプログラムは、次のような構造で記述できます。
using System;namespace SampleApp{internal class Program{static void Main(string[] args){Console.WriteLine("C#プログラムを実行しました");}}}
それぞれの役割は次のとおりです。
using System;:Consoleなどの機能を利用できるようにするnamespace:クラスを分類する名前空間class Program:処理をまとめるクラスMain:プログラムの実行開始地点Console.WriteLine:文字を画面に表示する
現在のC#では、より簡潔なトップレベルステートメントも利用できます。
Console.WriteLine("C#プログラムを実行しました");トップレベルステートメントでは、MainメソッドやProgramクラスを明示的に記述しなくても、上から順番にコードが実行されます。
1-5. 初心者がコード例を使って学ぶときの注意点
C#コード例を使って学習するときは、次の点を意識しましょう。
まず、コードがどの種類のプロジェクトを対象にしているか確認してください。コンソールアプリ用のコードと、Windows FormsやASP.NET Core用のコードでは、必要なプロジェクト構成が異なります。
また、コード例で使用されている.NETのバージョンや外部パッケージも確認が必要です。使用している環境によっては、同じコードでもそのまま実行できない場合があります。
コードをコピーした後は、次の順番で確認すると効率的です。
そのまま実行する
実行結果を確認する
変数名や値を変更する
条件や処理を追加する
発生したエラーの内容を読む
コード例を丸暗記するのではなく、「なぜこの結果になるのか」を考えることが重要です。
2. 初心者向けC#の基本文法コード例
2-1. Hello Worldを表示するコード例
最初に、画面へ文字列を表示する基本的なC#コード例を確認します。
Console.WriteLine("Hello, World!");実行結果は次のとおりです。
Hello, World!Console.WriteLineは、文字列を表示した後に改行します。改行せずに表示したい場合は、Console.Writeを使います。
Console.Write("こんにちは");Console.Write("C#");実行結果は次のようになります。
こんにちはC#2-2. 変数とデータ型のコード例
変数は、文字列や数値などのデータを一時的に保存するために使います。
string name = "田中";int age = 25;double height = 170.5;bool isMember = true;Console.WriteLine(name);Console.WriteLine(age);Console.WriteLine(height);Console.WriteLine(isMember);
よく使うデータ型には次のようなものがあります。
| データ型 | 保存する値の例 |
|---|---|
string | 文字列 |
char | 1文字 |
int | 整数 |
long | 大きな整数 |
float | 単精度の小数 |
double | 倍精度の小数 |
decimal | 金額計算などで使う小数 |
bool | trueまたはfalse |
型をコンパイラに推論させる場合は、varを使えます。
var productName = "ノートパソコン";var price = 98000;var taxRate = 0.1;Console.WriteLine(productName);Console.WriteLine(price);Console.WriteLine(taxRate);
varを使っても型がなくなるわけではありません。右辺の値から、コンパイル時に型が決定されます。
2-3. 文字列を扱うコード例
文字列はstring型で扱います。
string firstName = "太郎";string lastName = "山田";string fullName = lastName + " " + firstName;Console.WriteLine(fullName);
文字列補間を使うと、変数を読みやすく埋め込めます。
string name = "山田太郎";int age = 30;Console.WriteLine($"名前は{name}、年齢は{age}歳です。");
文字列の長さはLengthで取得できます。
string message = "C#を勉強します";Console.WriteLine(message.Length);
文字列に特定の文字が含まれているか調べる場合は、Containsを使います。
string text = "C#コード例を紹介します";bool contains = text.Contains("コード例");Console.WriteLine(contains);
文字列を置換するコード例は次のとおりです。
string text = "今日は晴れです";string replaced = text.Replace("晴れ", "雨");Console.WriteLine(replaced);
2-4. 数値計算を行うコード例
C#では、四則演算に次の演算子を使います。
int a = 10;int b = 3;Console.WriteLine(a + b); // 加算Console.WriteLine(a - b); // 減算Console.WriteLine(a * b); // 乗算Console.WriteLine(a / b); // 除算Console.WriteLine(a % b); // 余り
整数同士の除算では、小数部分が切り捨てられます。
int result = 10 / 3;Console.WriteLine(result); // 3小数まで取得するには、どちらかの値をdoubleにします。
double result = 10.0 / 3;Console.WriteLine(result);税込価格を計算するコード例は次のとおりです。
decimal price = 1000m;decimal taxRate = 0.1m;decimal total = price * (1 + taxRate);Console.WriteLine($"税込価格:{total}円");
decimal型の数値には、末尾にmを付けます。
2-5. コメントを書くコード例
コメントは、コードの説明やメモを残すために使います。コメント部分は実行されません。
1行コメントは//で記述します。
// ユーザー名を保存するstring userName = "佐藤";Console.WriteLine(userName); // ユーザー名を表示する
複数行コメントは/と/で囲みます。
/*商品価格と個数から合計金額を計算する*/int price = 500;int quantity = 3;Console.WriteLine(price * quantity);
コメントを書きすぎると読みにくくなるため、コードだけでは意図が伝わりにくい部分を中心に記述します。
2-6. 入力値を受け取るコード例
コンソールから入力を受け取るには、Console.ReadLineを使います。
Console.Write("名前を入力してください:");string? name = Console.ReadLine();Console.WriteLine($"こんにちは、{name}さん");
Console.ReadLineの戻り値は、入力が取得できない場合にnullになる可能性があります。そのため、string?として受け取るか、初期値を設定します。
Console.Write("名前を入力してください:");string name = Console.ReadLine() ?? "ゲスト";Console.WriteLine($"こんにちは、{name}さん");
整数を入力してもらう場合は、文字列から数値へ変換します。
Console.Write("年齢を入力してください:");string? input = Console.ReadLine();if (int.TryParse(input, out int age)){Console.WriteLine($"入力された年齢は{age}歳です");}else{Console.WriteLine("整数を入力してください");}
2-7. 型変換を行うコード例
文字列を整数へ変換する代表的な方法は、int.Parseとint.TryParseです。
string text = "100";int number = int.Parse(text);Console.WriteLine(number + 50);
int.Parseは、変換できない文字列を渡すと例外が発生します。
安全に変換するには、int.TryParseを使います。
string text = "100";if (int.TryParse(text, out int number)){Console.WriteLine(number + 50);}else{Console.WriteLine("数値に変換できません");}
数値を文字列へ変換するには、ToStringを使います。
int number = 123;string text = number.ToString();Console.WriteLine(text);
数値型同士を明示的に変換する場合は、キャストを使います。
double value = 12.8;int number = (int)value;Console.WriteLine(number); // 12
キャストでは、小数部分が四捨五入されずに切り捨てられます。四捨五入したい場合は、Math.Roundなどを利用します。
double value = 12.8;int number = (int)Math.Round(value);Console.WriteLine(number); // 13
3. 条件分岐・繰り返し処理のC#コード例
3-1. if文で条件分岐するコード例
if文は、条件を満たしたときだけ処理を実行します。
int age = 20;if (age >= 18){Console.WriteLine("成人です");}
比較には次の演算子を使います。
| 演算子 | 意味 |
== | 等しい |
!= | 等しくない |
> | より大きい |
< | より小さい |
>= | 以上 |
<= | 以下 |
文字列を比較するコード例は次のとおりです。
string role = "admin";if (role == "admin"){Console.WriteLine("管理者メニューを表示します");}
3-2. if else文で複数条件を判定するコード例
条件を満たさなかった場合の処理は、elseで記述します。
int score = 65;if (score >= 60){Console.WriteLine("合格です");}else{Console.WriteLine("不合格です");}
複数の条件を順番に判定する場合は、else ifを使います。
int score = 85;if (score >= 90){Console.WriteLine("評価:A");}else if (score >= 80){Console.WriteLine("評価:B");}else if (score >= 70){Console.WriteLine("評価:C");}else{Console.WriteLine("評価:D");}
複数条件を組み合わせる場合は、&&や||を使います。
int age = 25;bool hasLicense = true;if (age >= 18 && hasLicense){Console.WriteLine("運転できます");}
&&は「両方の条件を満たす」、||は「どちらかの条件を満たす」という意味です。
3-3. switch文を使うコード例
switch文は、値に応じて処理を分けるときに使います。
int day = 2;switch (day){case 1:Console.WriteLine("月曜日");break;case 2:Console.WriteLine("火曜日");break;case 3:Console.WriteLine("水曜日");break;default:Console.WriteLine("該当する曜日がありません");break;}
値を返すswitch式を使うと、より簡潔に記述できます。
int score = 85;string grade = score switch{>= 90 => "A",>= 80 => "B",>= 70 => "C",_ => "D"};
Console.WriteLine(grade);
_は、ほかの条件に一致しなかった場合を表します。
3-4. for文で繰り返し処理を行うコード例
for文は、回数を指定して処理を繰り返す場合に使います。
for (int i = 0; i < 5; i++){Console.WriteLine(i);}実行結果は、0から4までです。
1から5まで表示する場合は、次のように記述します。
for (int i = 1; i <= 5; i++){Console.WriteLine(i);}1から10までの合計を求めるコード例は次のとおりです。
int total = 0;for (int i = 1; i <= 10; i++){total += i;}
Console.WriteLine(total);
3-5. while文を使うコード例
while文は、条件を満たしている間、処理を繰り返します。
int count = 1;while (count <= 5){Console.WriteLine(count);count++;}
入力された文字列がexitになるまで処理を繰り返すコード例は次のとおりです。
while (true){Console.Write("文字を入力してください。終了する場合はexit:");string input = Console.ReadLine() ?? "";if (input == "exit"){break;}Console.WriteLine($"入力内容:{input}");
}
条件が常にtrueのループでは、必要なタイミングでbreakを使って終了させます。
3-6. foreach文で配列やリストを処理するコード例
foreach文は、配列やリストの要素を順番に取り出すときに使います。
string[] fruits = { "りんご", "みかん", "ぶどう" };foreach (string fruit in fruits){Console.WriteLine(fruit);}
Listでも同じように利用できます。
List<int> numbers = new() { 10, 20, 30 };foreach (int number in numbers){Console.WriteLine(number);}
要素の順番を表す番号が必要な場合は、通常のfor文を使う方法があります。
string[] fruits = { "りんご", "みかん", "ぶどう" };for (int i = 0; i < fruits.Length; i++){Console.WriteLine($"{i}:{fruits[i]}");}
3-7. breakとcontinueを使うコード例
breakは、繰り返し処理を途中で終了します。
for (int i = 1; i <= 10; i++){if (i == 5){break;}Console.WriteLine(i);
}
このコードでは、iが5になった時点でループを終了します。
continueは、その回の処理だけを中断し、次の繰り返しへ進みます。
for (int i = 1; i <= 5; i++){if (i == 3){continue;}Console.WriteLine(i);
}
実行結果には3だけが表示されません。
偶数だけを表示するコード例は次のとおりです。
for (int i = 1; i <= 10; i++){if (i % 2 != 0){continue;}Console.WriteLine(i);
}
4. 配列・List・Dictionaryを扱うC#コード例
4-1. 配列を作成して値を取得するコード例
配列は、同じ型の値をまとめて保存するために使います。
string[] colors = { "赤", "青", "緑" };Console.WriteLine(colors[0]);Console.WriteLine(colors[1]);Console.WriteLine(colors[2]);
配列の添字は0から始まります。最初の要素はcolors[0]です。
配列の要素数はLengthで取得できます。
string[] colors = { "赤", "青", "緑" };Console.WriteLine(colors.Length);
最後の要素を取得する場合は、次のように記述できます。
string[] colors = { "赤", "青", "緑" };Console.WriteLine(colors[^1]);
^1は末尾から1番目の要素を表します。
4-2. 配列に値を代入するコード例
要素数を指定して配列を作成し、後から値を代入できます。
int[] scores = new int[3];scores[0] = 80;scores[1] = 90;scores[2] = 75;
Console.WriteLine(scores[1]);
既存の値を書き換える場合も、添字を指定します。
string[] names = { "田中", "佐藤", "鈴木" };names[1] = "高橋";
foreach (string name in names){Console.WriteLine(name);}
配列は作成後に要素数を変更できません。要素を自由に追加・削除したい場合は、List<T>を使います。
4-3. Listを追加・削除・検索するコード例
List<T>は、要素数を変更できるコレクションです。
List<string> names = new();names.Add("田中");names.Add("佐藤");names.Add("鈴木");
foreach (string name in names){Console.WriteLine(name);}
要素を削除する場合は、Removeを使います。
List<string> names = new() { "田中", "佐藤", "鈴木" };bool removed = names.Remove("佐藤");
Console.WriteLine($"削除結果:{removed}");
位置を指定して削除する場合は、RemoveAtを使います。
List<string> names = new() { "田中", "佐藤", "鈴木" };names.RemoveAt(0);
値が含まれているか検索する場合は、Containsを使います。
List<string> names = new() { "田中", "佐藤", "鈴木" };if (names.Contains("佐藤")){Console.WriteLine("佐藤さんが見つかりました");}
条件に一致する最初の要素は、Findで取得できます。
List<int> numbers = new() { 10, 20, 30, 40 };int result = numbers.Find(number => number >= 25);Console.WriteLine(result);
4-4. Dictionaryでキーと値を扱うコード例
Dictionary<TKey, TValue>は、キーと値を組み合わせてデータを保存します。
Dictionary<string, int> scores = new(){{ "田中", 80 },{ "佐藤", 90 },{ "鈴木", 75 }};Console.WriteLine(scores["佐藤"]);
要素を追加する場合は、Addまたはインデクサーを使います。
Dictionary<string, int> scores = new();scores.Add("田中", 80);scores["佐藤"] = 90;
存在しないキーを直接指定すると例外が発生するため、TryGetValueを使うと安全です。
Dictionary<string, int> scores = new(){{ "田中", 80 },{ "佐藤", 90 }};if (scores.TryGetValue("佐藤", out int score)){Console.WriteLine(score);}else{Console.WriteLine("データがありません");}
すべてのキーと値を表示するコード例は次のとおりです。
foreach (KeyValuePair<string, int> item in scores){Console.WriteLine($"{item.Key}:{item.Value}点");}4-5. LINQでコレクションを絞り込むコード例
LINQを使うと、配列やリストの検索、並べ替え、集計を簡潔に記述できます。
偶数だけを抽出するコード例は次のとおりです。
List<int> numbers = new() { 1, 2, 3, 4, 5, 6 };List<int> evenNumbers = numbers.Where(number => number % 2 == 0).ToList();
foreach (int number in evenNumbers){Console.WriteLine(number);}
降順に並べ替える場合は、OrderByDescendingを使います。
List<int> numbers = new() { 30, 10, 50, 20 };List<int> sortedNumbers = numbers.OrderByDescending(number => number).ToList();
foreach (int number in sortedNumbers){Console.WriteLine(number);}
合計、平均、最大値を求めるコード例は次のとおりです。
List<int> scores = new() { 80, 90, 70 };Console.WriteLine($"合計:{scores.Sum()}");Console.WriteLine($"平均:{scores.Average()}");Console.WriteLine($"最大:{scores.Max()}");
オブジェクトのリストも絞り込めます。
List<Product> products = new(){new Product { Name = "キーボード", Price = 5000 },new Product { Name = "マウス", Price = 3000 },new Product { Name = "モニター", Price = 30000 }};List<Product> results = products.Where(product => product.Price >= 5000).OrderBy(product => product.Price).ToList();
foreach (Product product in results){Console.WriteLine($"{product.Name}:{product.Price}円");}
class Product{public string Name { get; set; } = "";public int Price { get; set; }}
4-6. コレクション処理でよくあるエラーと対策
配列でよくある問題は、存在しない添字を指定することです。
int[] numbers = { 10, 20, 30 };// Console.WriteLine(numbers[3]);
この配列で利用できる添字は0、1、2です。ループでは、<=ではなく<を使います。
for (int i = 0; i < numbers.Length; i++){Console.WriteLine(numbers[i]);}foreachの実行中に、同じリストから要素を削除すると例外が発生します。
List<int> numbers = new() { 1, 2, 3, 4, 5 };// foreach (int number in numbers)// {// numbers.Remove(number);// }
条件に一致する要素をまとめて削除する場合は、RemoveAllを使います。
List<int> numbers = new() { 1, 2, 3, 4, 5 };numbers.RemoveAll(number => number % 2 == 0);
Console.WriteLine(string.Join(", ", numbers));
Dictionaryへ同じキーをAddすると例外が発生します。上書きしてよい場合はインデクサーを使います。
Dictionary<string, int> scores = new();scores["田中"] = 80;scores["田中"] = 90;
Console.WriteLine(scores["田中"]);
5. メソッド・クラス・オブジェクト指向のC#コード例
5-1. メソッドを定義して呼び出すコード例
メソッドは、複数の処理をひとつにまとめるために使います。
ShowMessage();static void ShowMessage(){Console.WriteLine("メソッドを実行しました");}
同じ処理を複数回呼び出せます。
ShowMessage();ShowMessage();ShowMessage();static void ShowMessage(){Console.WriteLine("こんにちは");}
voidは、値を返さないメソッドであることを表します。
5-2. 引数と戻り値を使うコード例
メソッドへ値を渡すには、引数を定義します。
Greet("田中");Greet("佐藤");static void Greet(string name){Console.WriteLine($"こんにちは、{name}さん");}
計算結果を返すメソッドは、戻り値の型を指定します。
int result = Add(10, 20);Console.WriteLine(result);static int Add(int a, int b){return a + b;}
省略可能な引数を設定することもできます。
ShowPrice(1000);ShowPrice(1000, 0.08m);static void ShowPrice(decimal price, decimal taxRate = 0.1m){decimal total = price * (1 + taxRate);Console.WriteLine(total);}
5-3. クラスを作成するコード例
クラスは、データと処理をひとつにまとめる設計図です。
class Person{public string Name { get; set; } = "";public int Age { get; set; }public void Introduce(){Console.WriteLine($"私は{Name}です。{Age}歳です。");}
}
この例では、Personクラスに名前、年齢、自己紹介処理を定義しています。
5-4. インスタンスを生成するコード例
クラスを実際に利用するには、newを使ってインスタンスを生成します。
Person person = new Person();person.Name = "山田太郎";person.Age = 30;
person.Introduce();
class Person{public string Name { get; set; } = "";public int Age { get; set; }
public void Introduce(){Console.WriteLine($"私は{Name}です。{Age}歳です。");}
}
オブジェクト初期化子を使うと、生成と同時に値を設定できます。
Person person = new(){Name = "山田太郎",Age = 30};5-5. プロパティを使うコード例
プロパティは、クラスが持つデータを取得・設定するために使います。
class Product{public string Name { get; set; } = "";public decimal Price { get; set; }}外部から値を変更させたくない場合は、private setや読み取り専用プロパティを使います。
class User{public string Name { get; private set; }public User(string name){Name = name;}public void ChangeName(string newName){if (!string.IsNullOrWhiteSpace(newName)){Name = newName;}}
}
計算結果を返すプロパティも定義できます。
class Rectangle{public double Width { get; set; }public double Height { get; set; }public double Area => Width * Height;
}
5-6. コンストラクタを使うコード例
コンストラクタは、インスタンス生成時に実行される特別な処理です。
Person person = new Person("山田太郎", 30);person.Introduce();class Person{public string Name { get; }public int Age { get; }
public Person(string name, int age){Name = name;Age = age;}public void Introduce(){Console.WriteLine($"私は{Name}です。{Age}歳です。");}
}
コンストラクタを使うと、インスタンス生成時に必要な値を必ず設定できます。
5-7. 継承を使うコード例
継承を使うと、既存クラスの機能を別のクラスへ引き継げます。
Dog dog = new Dog();dog.Name = "ポチ";dog.Speak();class Animal{public string Name { get; set; } = "";
public virtual void Speak(){Console.WriteLine("鳴き声");}
}
class Dog : Animal{public override void Speak(){Console.WriteLine($"{Name}:ワン");}}
virtualを付けたメソッドは、派生クラスでoverrideできます。
ただし、共通処理が少ない場合や継承関係が不自然な場合は、無理に継承を使わず、クラスを組み合わせる設計も検討します。
5-8. インターフェースを使うコード例
インターフェースは、クラスが実装すべき機能の形式を定義します。
INotification notification = new EmailNotification();notification.Send("メールを送信しました");interface INotification{void Send(string message);}
class EmailNotification : INotification{public void Send(string message){Console.WriteLine($"メール通知:{message}");}}
異なる通知方法を同じインターフェースで扱うこともできます。
List<INotification> notifications = new(){new EmailNotification(),new SmsNotification()};foreach (INotification notification in notifications){notification.Send("新しいお知らせがあります");}
interface INotification{void Send(string message);}
class EmailNotification : INotification{public void Send(string message){Console.WriteLine($"メール:{message}");}}
class SmsNotification : INotification{public void Send(string message){Console.WriteLine($"SMS:{message}");}}
6. 実践で使えるC#コード例集
6-1. ファイルを読み込むコード例
テキストファイル全体を読み込むには、File.ReadAllTextを使います。
string path = "sample.txt";if (File.Exists(path)){string content = File.ReadAllText(path);Console.WriteLine(content);}else{Console.WriteLine("ファイルが見つかりません");}
複数行を配列として読み込む場合は、File.ReadAllLinesを使います。
string[] lines = File.ReadAllLines("sample.txt");foreach (string line in lines){Console.WriteLine(line);}
大きなファイルを1行ずつ処理する場合は、File.ReadLinesが便利です。
foreach (string line in File.ReadLines("sample.txt")){Console.WriteLine(line);}6-2. ファイルへ書き込むコード例
テキストをファイルへ書き込むには、File.WriteAllTextを使います。
string path = "output.txt";string content = "C#でファイルを書き込みました";File.WriteAllText(path, content);
Console.WriteLine("書き込みが完了しました");
既存ファイルの末尾へ追記する場合は、File.AppendAllTextを使います。
string path = "log.txt";string message = $"{DateTime.Now}: 処理を実行しました{Environment.NewLine}";File.AppendAllText(path, message);
複数行を書き込む場合は、File.WriteAllLinesを利用できます。
string[] lines ={"1行目","2行目","3行目"};File.WriteAllLines("output.txt", lines);
6-3. 日付と時刻を扱うコード例
現在の日付と時刻は、DateTime.Nowで取得できます。
DateTime now = DateTime.Now;Console.WriteLine(now);Console.WriteLine(now.ToString("yyyy年MM月dd日 HH:mm:ss"));
日付を加算するコード例は次のとおりです。
DateTime today = DateTime.Today;Console.WriteLine(today.AddDays(7));Console.WriteLine(today.AddMonths(1));Console.WriteLine(today.AddYears(1));
2つの日付の差を求める場合は、TimeSpanを使います。
DateTime startDate = new DateTime(2026, 1, 1);DateTime endDate = new DateTime(2026, 1, 10);TimeSpan difference = endDate - startDate;
Console.WriteLine($"{difference.Days}日間");
文字列を日付へ安全に変換する場合は、DateTime.TryParseを使います。
string input = "2026/06/19";if (DateTime.TryParse(input, out DateTime date)){Console.WriteLine(date.ToString("yyyy年MM月dd日"));}else{Console.WriteLine("日付形式が正しくありません");}
6-4. 例外処理を行うコード例
例外が発生する可能性のある処理は、tryとcatchで処理できます。
try{Console.Write("整数を入力してください:");int number = int.Parse(Console.ReadLine() ?? "");Console.WriteLine($"入力値:{number}");
}catch (FormatException){Console.WriteLine("整数として変換できません");}
複数の例外を分けて処理することもできます。
try{string content = File.ReadAllText("sample.txt");Console.WriteLine(content);}catch (FileNotFoundException){Console.WriteLine("ファイルが見つかりません");}catch (UnauthorizedAccessException){Console.WriteLine("ファイルへアクセスする権限がありません");}catch (IOException ex){Console.WriteLine($"入出力エラー:{ex.Message}");}例外の有無にかかわらず実行したい処理は、finallyに記述します。
try{Console.WriteLine("処理を開始します");}catch (Exception ex){Console.WriteLine(ex.Message);}finally{Console.WriteLine("終了処理を実行します");}6-5. ランダムな数値を生成するコード例
ランダムな整数を生成するには、Randomを使います。
Random random = new Random();int number = random.Next(1, 101);Console.WriteLine(number);
Next(1, 101)では、1以上101未満、つまり1から100までの整数が生成されます。
配列からランダムに1つ選ぶコード例は次のとおりです。
string[] fortunes = { "大吉", "中吉", "小吉", "凶" };int index = Random.Shared.Next(fortunes.Length);
Console.WriteLine(fortunes[index]);
パスワードやトークンなど、セキュリティ用途の乱数には通常のRandomではなく、暗号学的乱数生成機能を使用します。
using System.Security.Cryptography;int secureNumber = RandomNumberGenerator.GetInt32(1, 101);Console.WriteLine(secureNumber);
6-6. 正規表現で文字列を判定するコード例
正規表現を使うと、文字列が特定の形式に一致するか判定できます。
郵便番号を判定するコード例は次のとおりです。
using System.Text.RegularExpressions;string postalCode = "123-4567";string pattern = @"^\d{3}-\d{4}$";
if (Regex.IsMatch(postalCode, pattern)){Console.WriteLine("正しい郵便番号形式です");}else{Console.WriteLine("郵便番号形式が正しくありません");}
文字列から連続する数値を抽出するコード例は次のとおりです。
using System.Text.RegularExpressions;string text = "商品番号は12345です";Match match = Regex.Match(text, @"\d+");
if (match.Success){Console.WriteLine(match.Value);}
正規表現だけでメールアドレスの完全な妥当性を判定するのは難しいため、入力形式の簡易確認として利用し、必要に応じて確認メールなどを組み合わせます。
6-7. JSONを読み書きするコード例
JSONの読み書きには、System.Text.Jsonを利用できます。
オブジェクトをJSON文字列へ変換するコード例は次のとおりです。
using System.Text.Json;User user = new User{Name = "山田太郎",Age = 30};
string json = JsonSerializer.Serialize(user);
Console.WriteLine(json);
class User{public string Name { get; set; } = "";public int Age { get; set; }}
読みやすく整形する場合は、オプションを指定します。
JsonSerializerOptions options = new(){WriteIndented = true};string json = JsonSerializer.Serialize(user, options);Console.WriteLine(json);
JSON文字列をオブジェクトへ変換するコード例は次のとおりです。
using System.Text.Json;string json = """{"Name": "山田太郎","Age": 30}""";
User? user = JsonSerializer.Deserialize<User>(json);
if (user is not null){Console.WriteLine($"{user.Name}:{user.Age}歳");}
class User{public string Name { get; set; } = "";public int Age { get; set; }}
JSONをファイルへ保存する場合は、シリアライズした文字列をFile.WriteAllTextで書き込みます。
string json = JsonSerializer.Serialize(user, options);File.WriteAllText("user.json", json);6-8. HTTP通信を行うコード例
HTTP GETリクエストを送るには、HttpClientを使います。
using HttpClient client = new HttpClient();try{string response = await client.GetStringAsync("https://example.com");Console.WriteLine(response);}catch (HttpRequestException ex){Console.WriteLine($"HTTP通信に失敗しました:{ex.Message}");}
ステータスコードを確認する場合は、GetAsyncを使います。
using HttpClient client = new HttpClient();HttpResponseMessage response =await client.GetAsync("https://example.com");
if (response.IsSuccessStatusCode){string content = await response.Content.ReadAsStringAsync();Console.WriteLine(content);}else{Console.WriteLine($"エラー:{(int)response.StatusCode} {response.ReasonPhrase}");}
JSONをPOSTするコード例は次のとおりです。
using System.Net.Http.Json;using HttpClient client = new HttpClient();
var requestData = new{title = "C#コード例",body = "HTTP POSTのサンプル"};
HttpResponseMessage response = await client.PostAsJsonAsync("https://example.com/api/posts",requestData);
Console.WriteLine(response.StatusCode);
実際のアプリでは、HttpClientをリクエストごとに何度も生成せず、再利用する設計が一般的です。
6-9. 非同期処理async/awaitのコード例
時間のかかる処理を待つ間にスレッドを占有し続けないようにするには、asyncとawaitを使います。
await ShowMessageAsync();static async Task ShowMessageAsync(){Console.WriteLine("処理を開始します");
await Task.Delay(1000);Console.WriteLine("処理が完了しました");
}
戻り値がある非同期メソッドは、Task<T>を返します。
int result = await AddAsync(10, 20);Console.WriteLine(result);static async Task<int> AddAsync(int a, int b){await Task.Delay(500);return a + b;}
複数の非同期処理を並行して待つ場合は、Task.WhenAllを利用できます。
Task task1 = Task.Delay(1000);Task task2 = Task.Delay(1500);Task task3 = Task.Delay(500);await Task.WhenAll(task1, task2, task3);
Console.WriteLine("すべての処理が完了しました");
7. アプリ開発で使えるC#コード例
7-1. コンソールアプリのコード例
簡単な電卓を作るコード例です。
Console.Write("1つ目の数値:");string? firstInput = Console.ReadLine();Console.Write("演算子(+、-、*、/):");string? operation = Console.ReadLine();
Console.Write("2つ目の数値:");string? secondInput = Console.ReadLine();
if (!double.TryParse(firstInput, out double first) ||!double.TryParse(secondInput, out double second)){Console.WriteLine("数値を正しく入力してください");return;}
double? result = operation switch{"+" => first + second,"-" => first - second,"*" => first * second,"/" when second != 0 => first / second,_ => null};
if (result.HasValue){Console.WriteLine($"計算結果:{result.Value}");}else{Console.WriteLine("演算子が正しくないか、0で除算しようとしました");}
入力値の検証、条件分岐、計算、結果表示を含むため、基本文法を組み合わせる練習に適しています。
7-2. Windows Formsアプリのコード例
Windows Formsでボタンを押したときにメッセージを表示するコード例です。
フォームにButtonを配置し、クリックイベントへ次の処理を記述します。
private void button1_Click(object sender, EventArgs e){MessageBox.Show("ボタンがクリックされました");}テキストボックスの内容をラベルへ表示する場合は、次のように記述します。
private void button1_Click(object sender, EventArgs e){string name = textBox1.Text;if (string.IsNullOrWhiteSpace(name)){MessageBox.Show("名前を入力してください");return;}label1.Text = $"こんにちは、{name}さん";
}
Windows Formsでは、フォーム上の部品をコントロールと呼びます。ボタンやテキストボックスのイベントを利用して処理を実行します。
7-3. WPFアプリのコード例
WPFでは、画面をXAMLで定義し、C#で動作を記述します。
XAMLの例は次のとおりです。
<StackPanel Margin="20"><TextBox x:Name="NameTextBox" Margin="0,0,0,10" /><Button Content="表示"Click="ShowButton_Click"Margin="0,0,0,10" /><TextBlock x:Name="MessageTextBlock" /></StackPanel>ボタンクリック時のC#コード例は次のとおりです。
private void ShowButton_Click(object sender, RoutedEventArgs e){string name = NameTextBox.Text;if (string.IsNullOrWhiteSpace(name)){MessageTextBlock.Text = "名前を入力してください";return;}MessageTextBlock.Text = $"こんにちは、{name}さん";
}
規模が大きくなる場合は、画面と処理を分離しやすいMVVMパターンの利用を検討します。
7-4. ASP.NET CoreでWebアプリを作るコード例
ASP.NET Coreの最小構成では、次のようなコードで文字列を返すWebアプリを作成できます。
var builder = WebApplication.CreateBuilder(args);var app = builder.Build();app.MapGet("/", () => "Hello ASP.NET Core!");
app.Run();
URLパラメーターを受け取るコード例は次のとおりです。
app.MapGet("/hello/{name}", (string name) =>{return $"こんにちは、{name}さん";});クエリパラメーターを受け取る場合は、次のように記述できます。
app.MapGet("/products", (int? minPrice) =>{int price = minPrice ?? 0;return $"最低価格:{price}円";});7-5. APIを作成するコード例
ASP.NET CoreのMinimal APIで、簡単な商品APIを作るコード例です。
var builder = WebApplication.CreateBuilder(args);var app = builder.Build();List<Product> products = new(){new Product(1, "キーボード", 5000),new Product(2, "マウス", 3000)};
app.MapGet("/api/products", () => products);
app.MapGet("/api/products/{id:int}", (int id) =>{Product? product = products.FirstOrDefault(p => p.Id == id);
return product is not null? Results.Ok(product): Results.NotFound();
});
app.MapPost("/api/products", (Product product) =>{products.Add(product);return Results.Created($"/api/products/{product.Id}", product);});
app.Run();
record Product(int Id, string Name, int Price);
実務では、入力値検証、重複チェック、認証、ログ、データベース処理なども追加します。
7-6. データベースに接続するコード例
ADO.NETを使ってSQL Serverへ接続する基本例は次のとおりです。使用するプロバイダーに対応したパッケージが必要です。
using Microsoft.Data.SqlClient;string connectionString ="Server=localhost;Database=SampleDb;" +"Trusted_Connection=True;TrustServerCertificate=True;";
await using SqlConnection connection =new SqlConnection(connectionString);
await connection.OpenAsync();
string sql = "SELECT Id, Name FROM Users";
await using SqlCommand command =new SqlCommand(sql, connection);
await using SqlDataReader reader =await command.ExecuteReaderAsync();
while (await reader.ReadAsync()){int id = reader.GetInt32(0);string name = reader.GetString(1);
Console.WriteLine($"{id}:{name}");
}
入力値をSQLへ渡す場合は、文字列連結ではなくパラメーターを使います。
string sql = "SELECT Id, Name FROM Users WHERE Name = @Name";await using SqlCommand command =new SqlCommand(sql, connection);
command.Parameters.AddWithValue("@Name", "山田");
await using SqlDataReader reader =await command.ExecuteReaderAsync();
接続文字列にパスワードを直接書き込まず、設定ファイル、環境変数、シークレット管理機能などを利用することが重要です。
7-7. Unityで使えるC#コード例
Unityでオブジェクトを移動させる基本的なコード例です。
using UnityEngine;public class PlayerController : MonoBehaviour{[SerializeField]private float speed = 5f;
private void Update(){float horizontal = Input.GetAxis("Horizontal");float vertical = Input.GetAxis("Vertical");Vector3 direction =new Vector3(horizontal, 0f, vertical);transform.Translate(direction * speed * Time.deltaTime);}
}
Updateは基本的に毎フレーム呼び出されます。Time.deltaTimeを掛けることで、フレームレートの違いによる移動速度の差を抑えられます。
衝突を検知するコード例は次のとおりです。
using UnityEngine;public class ItemCollector : MonoBehaviour{private void OnTriggerEnter(Collider other){if (other.CompareTag("Item")){Debug.Log("アイテムを取得しました");Destroy(other.gameObject);}}}
このコードを使うには、Colliderの設定やタグの登録など、Unityエディター側の準備も必要です。
8. C#コード例でよくあるエラーと解決方法
8-1. コンパイルエラーの原因と対策
コンパイルエラーは、文法や型などに問題があり、プログラムを実行できない状態です。
よくある原因には次のものがあります。
セミコロンの付け忘れ
括弧の閉じ忘れ
変数名の入力ミス
型の不一致
必要な
usingの不足存在しないメソッドの呼び出し
次のコードでは、末尾のセミコロンがありません。
// Console.WriteLine("こんにちは")正しくは次のとおりです。
Console.WriteLine("こんにちは");変数名では大文字と小文字が区別されます。
string userName = "田中";// Console.WriteLine(username);Console.WriteLine(userName);
エラー一覧に表示されたファイル名、行番号、エラーコード、メッセージを確認し、最初に発生しているエラーから修正します。
8-2. NullReferenceExceptionの原因と対策
NullReferenceExceptionは、nullの変数からプロパティやメソッドを利用しようとしたときに発生します。
string? name = null;// Console.WriteLine(name.Length);
事前にnullを確認します。
string? name = null;if (name is not null){Console.WriteLine(name.Length);}else{Console.WriteLine("名前が設定されていません");}
null条件演算子を使う方法もあります。
string? name = null;int? length = name?.Length;Console.WriteLine(length ?? 0);
初期値を設定できる場合は、nullではなく空文字列や空のコレクションを使う方法も有効です。
string name = "";List<string> names = new();8-3. 型変換エラーの原因と対策
変換できない文字列をParseへ渡すと、FormatExceptionが発生します。
string input = "abc";// int number = int.Parse(input);
ユーザー入力や外部データは、TryParseで検証します。
string input = "abc";if (int.TryParse(input, out int number)){Console.WriteLine(number);}else{Console.WriteLine("整数に変換できません");}
数値が変換先の型の範囲を超えている場合も変換に失敗します。
string input = "99999999999999999999";if (!int.TryParse(input, out int number)){Console.WriteLine("int型の範囲内で入力してください");}
必要に応じて、より広い範囲を扱えるlongやdecimalを検討します。
8-4. 配列の範囲外エラーの原因と対策
配列の要素数を超えた添字へアクセスすると、IndexOutOfRangeExceptionが発生します。
string[] names = { "田中", "佐藤", "鈴木" };// Console.WriteLine(names[3]);
利用できる添字は0からLength - 1までです。
for (int i = 0; i < names.Length; i++){Console.WriteLine(names[i]);}外部から添字を受け取る場合は、範囲を確認します。
int index = 2;if (index >= 0 && index < names.Length){Console.WriteLine(names[index]);}else{Console.WriteLine("指定された位置は範囲外です");}
8-5. ファイル読み書きエラーの原因と対策
ファイル操作では、次のようなエラーが起こります。
ファイルが存在しない
フォルダーが存在しない
アクセス権限がない
別のプログラムがファイルを使用している
パスに使用できない文字が含まれている
読み込み前にファイルの存在を確認します。
string path = "data.txt";if (!File.Exists(path)){Console.WriteLine("ファイルが存在しません");return;}
string content = File.ReadAllText(path);Console.WriteLine(content);
書き込み先のフォルダーを作成するコード例は次のとおりです。
string directory = "output";string path = Path.Combine(directory, "data.txt");Directory.CreateDirectory(directory);File.WriteAllText(path, "保存内容");
例外処理も組み合わせます。
try{File.WriteAllText("output.txt", "保存内容");}catch (UnauthorizedAccessException){Console.WriteLine("書き込み権限がありません");}catch (IOException ex){Console.WriteLine($"ファイル操作に失敗しました:{ex.Message}");}8-6. 非同期処理で起きやすいエラーと対策
非同期処理では、awaitの付け忘れに注意します。
Task<string> task =File.ReadAllTextAsync("sample.txt");// この時点では読み込み結果ではなくTask
結果を取得するには、awaitを使います。
string content =await File.ReadAllTextAsync("sample.txt");Console.WriteLine(content);
原則として、非同期メソッドはasync voidではなくasync Taskにします。async voidは、主にイベントハンドラーで使用します。
static async Task SaveAsync(){await File.WriteAllTextAsync("output.txt","保存内容");}非同期処理の例外もtryとcatchで処理できます。
try{string content =await File.ReadAllTextAsync("sample.txt");Console.WriteLine(content);
}catch (IOException ex){Console.WriteLine($"読み込みに失敗しました:{ex.Message}");}
処理をキャンセルできるようにする場合は、CancellationTokenを受け取ります。
using CancellationTokenSource source = new();try{await Task.Delay(TimeSpan.FromSeconds(10),source.Token);}catch (OperationCanceledException){Console.WriteLine("処理がキャンセルされました");}
8-7. エラーメッセージを読むときのポイント
エラーが発生したら、まず次の情報を確認します。
例外またはエラーの種類
エラーメッセージ
ファイル名
行番号
スタックトレース
エラー直前に渡された値
たとえば、次のようなメッセージが表示されたとします。
System.IndexOutOfRangeException:Index was outside the bounds of the array.この場合は、配列の範囲外へアクセスしている可能性があります。エラーが発生した行の添字と、配列のLengthを確認します。
デバッグ時には、変数の値を出力する方法も有効です。
Console.WriteLine($"index={index}");Console.WriteLine($"length={names.Length}");Visual Studioでは、ブレークポイントを設定すると、処理を一時停止して変数の値や実行順序を確認できます。
なお、エラーメッセージを確認せずに、コードを何度も書き換えるのは効率的ではありません。メッセージに含まれる例外名や行番号を手がかりに、原因を小さく切り分けましょう。
9. C#コード例を効率よく学ぶコツ
9-1. コードをコピーして動かすだけで終わらせない
C#コード例をコピーして正常に動かすことは、学習の第一歩です。しかし、そのまま実行するだけでは、コードの意味を十分に理解できないことがあります。
実行後は、次の点を確認しましょう。
どの行から処理が始まるか
各変数に何が入っているか
条件が成立するのはどのような場合か
メソッドへ何を渡しているか
実行結果がどの行で出力されているか
コードを一度閉じ、自分で同じ処理を書き直す練習も効果的です。
9-2. 変数名や条件を変えて動作を確認する
コード例を理解するには、一部分を変更して結果を比較します。
たとえば、次の条件を変更してみましょう。
int score = 80;if (score >= 60){Console.WriteLine("合格");}else{Console.WriteLine("不合格");}
scoreを50や60に変えると、条件の境界を確認できます。
さらに、合格条件を70点へ変更します。
if (score >= 70){Console.WriteLine("合格");}このように、値、条件、変数名、表示内容を変更すると、各コードの役割が見えやすくなります。
9-3. エラーを再現して原因を理解する
エラーを避けるだけでなく、学習用コードで意図的にエラーを発生させることも有効です。
たとえば、次のような変更を試します。
セミコロンを削除する
存在しない変数名を書く
配列の範囲外へアクセスする
数字以外の文字列を
int.Parseへ渡すnullの変数からプロパティを取得する
エラーが発生したら、メッセージと発生行を確認し、元のコードとの差を調べます。エラーの原因と修正方法をセットで覚えると、実際の開発でも問題を解決しやすくなります。
9-4. 公式ドキュメントとコード例を併用する
コード例で使い方を確認した後は、公式ドキュメントでメソッドやクラスの仕様を確認します。
特に次の情報が重要です。
引数の型と意味
戻り値
発生する可能性がある例外
利用できる.NETのバージョン
類似するメソッドとの違い
使用上の注意点
たとえば、File.ReadAllTextのコード例を動かした後に、文字コードを指定するオーバーロードや発生する例外を確認すると、より実践的な知識が身につきます。
9-5. 小さなサンプルから実践アプリへ発展させる
最初から大規模なアプリを作ろうとすると、画面、データベース、通信、設計など、多くの要素を同時に考える必要があります。
まずは、次のような小さなプログラムを作るとよいでしょう。
数当てゲーム
簡単な電卓
じゃんけんゲーム
ToDoリスト
CSVファイル集計ツール
家計簿
商品検索プログラム
天気APIを利用するアプリ
たとえば、コンソール版のToDoリストから始め、次の順番で機能を増やせます。
タスクをListへ追加する
タスク一覧を表示する
タスクを削除する
ファイルへ保存する
起動時にファイルから読み込む
Windows FormsやWPFで画面を付ける
データベースへ保存する
Webアプリへ発展させる
小さく完成させながら機能を増やすと、C#コード例で学んだ知識を実践へつなげられます。
10. C#コード例に関するよくある質問
10-1. C#初心者はどのコード例から学ぶべき?
C#初心者は、次の順番で学ぶと理解しやすくなります。
Console.WriteLineによる文字表示変数とデータ型
四則演算
ifによる条件分岐forとforeachによる繰り返し配列とList
メソッド
クラスとインスタンス
例外処理
ファイル操作
基本文法を一通り学んだ後、コンソール上で動く電卓やToDoリストを作ると、知識を定着させやすくなります。
10-2. C#のコード例はそのまま実務で使える?
短いC#コード例は、機能の使い方を理解するために処理を簡略化していることがあります。そのため、実務でそのまま利用できるとは限りません。
実務へ組み込む前に、少なくとも次の点を確認します。
入力値の検証
nullへの対応例外処理
ログ出力
セキュリティ
パフォーマンス
非同期処理
リソースの解放
テスト
設定値や秘密情報の管理
特に、データベース接続、HTTP通信、ファイル操作では、失敗時の処理を必ず考える必要があります。
10-3. C#とJavaのコード例は何が違う?
C#とJavaは、クラス、継承、インターフェース、例外処理など、似た文法や考え方を持っています。ただし、動作環境や標準機能、開発フレームワークには違いがあります。
C#では、プロパティ、LINQ、デリゲート、イベント、asyncとawaitなどがよく利用されます。
C#のプロパティは次のように記述できます。
public string Name { get; set; } = "";また、LINQを使うとコレクションの抽出を簡潔に記述できます。
List<int> results = numbers.Where(number => number >= 10).ToList();Java経験者がC#を学ぶ場合は、似ている文法だけでなく、C#独自の機能や.NETのクラスライブラリを重点的に確認するとよいでしょう。
10-4. C#でWebアプリを作るにはどのコード例を見ればよい?
C#でWebアプリを作る場合は、ASP.NET Coreのコード例を確認します。
最初に学びたい項目は次のとおりです。
ルーティング
HTTPメソッド
リクエストとレスポンス
MVCまたはRazor Pages
Minimal API
入力値検証
DI
Entity Framework Core
認証と認可
ログ
設定ファイル
まずは文字列やJSONを返す小さなWeb APIを作り、その後データベース接続や認証機能を追加すると、段階的に理解できます。
10-5. C#でゲーム開発をするにはどのコード例が必要?
UnityでC#を使う場合でも、最初に基本文法を身につける必要があります。
特に重要な項目は次のとおりです。
変数とデータ型
ifによる条件分岐forとforeachメソッド
クラス
継承
インターフェース
ListやDictionary
ベクトル
イベント
コルーチンや非同期処理
Unity固有の要素としては、次のコード例を学ぶとよいでしょう。
MonoBehaviourStartUpdateTransformRigidbodyColliderInputプレハブ
シーン管理
UI操作
移動、ジャンプ、衝突判定、スコア表示など、小さな機能を1つずつ実装していく方法が効果的です。
10-6. C#コード例を実行できないときはどうすればよい?
C#コード例を実行できない場合は、次の順番で確認します。
.NET SDKがインストールされているか
対象プロジェクトの種類が合っているか
エラーメッセージが表示されているか
必要な
usingが記述されているか外部パッケージが必要ではないか
クラスやメソッドを正しい位置へ記述しているか
対象の.NETバージョンで利用できる機能か
ファイルやURLなどの指定が正しいか
ターミナルでは、次のコマンドでビルドエラーを確認できます。
dotnet buildパッケージの復元に問題がある場合は、次のコマンドを実行します。
dotnet restoreエラーを調べるときは、メッセージ全体を確認します。エラーコード、例外名、発生行、直前の処理を手がかりに原因を絞り込みましょう。
まとめ
C#コード例を使って学ぶときは、基本文法から始め、条件分岐、繰り返し処理、配列、List、メソッド、クラスの順に進めると理解しやすくなります。
基本を身につけた後は、ファイル操作、JSON、HTTP通信、非同期処理など、実践でよく使う機能に取り組みましょう。さらに、Windows Forms、WPF、ASP.NET Core、データベース、Unityのコード例へ進めば、作りたいアプリに必要な知識を段階的に習得できます。
コード例はコピーして実行するだけでなく、変数、条件、入力値、処理内容を変更することが重要です。エラーが発生した場合も、エラーメッセージや行番号を確認し、原因を一つずつ切り分けてください。
小さなコード例を組み合わせ、電卓、ToDoリスト、ファイル管理ツール、Web APIなどのアプリへ発展させることで、C#の文法と実践的なプログラミング力を身につけられます。

