csharp sample code集|初心者がコピペで学べるC#基本文法と実用サンプルまとめ
はじめに
C#を学び始めたものの、「文法の説明だけでは書き方が分からない」「すぐに実行できるcsharp sample codeが欲しい」と感じる方は多いでしょう。プログラミングを効率よく身につけるには、知識を読むだけでなく、サンプルコードを実際に動かし、値や処理を書き換えながら結果を確認することが重要です。
この記事では、C#初心者がコピペして実行できる基本文法から、配列、List、クラス、LINQ、JSON、HTTP通信などの実用的なC# sample codeまでまとめて紹介します。多くのコードは、.NETのコンソールアプリに貼り付けて試せる形式です。
最初からすべてを暗記する必要はありません。まずコードを動かし、次に一部を書き換え、最後に自分で似た処理を作るという順番で学習を進めましょう。
1. csharp sample code集の使い方|初心者が最短で学ぶための読み方
1-1. この記事で学べるC#の基本文法と実用サンプル
この記事では、次のようなC#の知識をサンプルコード付きで学べます。
変数、データ型、文字列、数値計算
if文やswitch文による条件分岐
for文、while文、foreach文による繰り返し
配列、List、Dictionaryの操作
メソッド、クラス、継承、インターフェース
ファイルの読み書き
例外処理
LINQによるデータ処理
JSONの変換
HTTPリクエスト
電卓やTODOリストなどの小さなプログラム
前半では基本文法を扱い、後半では実務でも利用する処理へ段階的に進みます。完全な初心者は、Hello Worldから順番に試すと理解しやすくなります。
1-2. コピペして動かす前に確認すべきポイント
C# sample codeをコピーするときは、コードを貼り付ける場所を確認してください。本記事の短いサンプルは、基本的にコンソールアプリのProgram.csへ貼り付けることを想定しています。
クラスを含むサンプルでは、ファイル全体を置き換える必要がある場合があります。また、複数のコード例を同じファイルへ続けて貼り付けると、変数名やクラス名が重複してエラーになることがあります。最初はコード例ごとにProgram.csの内容を入れ替えて実行するのがおすすめです。
サンプルコードを利用するときは、次の点も確認しましょう。
全角記号が混ざっていないか
{と}の数が合っているか文字列を半角のダブルクォーテーションで囲んでいるか
必要な
usingが記述されているか利用中の.NETバージョンで使える機能か
ファイルパスやURLを自分の環境に合わせたか
1-3. C#とcsharpの違い・検索キーワードとしての意味
正式なプログラミング言語名は「C#」です。ただし、#はURLや検索システムによって特別な記号として扱われることがあるため、検索キーワードでは「csharp」と入力されることがあります。
つまり、次のキーワードは基本的に同じ言語について調べるために使われます。
C#
csharp
C Sharp
csharp sample code
C# サンプルコード
ソースコード上では「csharp」と記述するわけではありません。Markdownのコードブロックでは、C#用のシンタックスハイライトを指定するために、csharpという識別子が使われることがあります。
1-4. サンプルコードを効率よく学習に使う手順
サンプルコードは、ただコピーするだけでなく、次の順番で学習すると効果的です。
最初にコードをそのまま実行し、正常に動くことを確認します。次に、文字列、数値、条件式などを少しずつ変更します。その後、コードを見ずに同じ処理を書き直します。最後に、入力機能やエラー処理を追加して、自分なりに応用します。
たとえば、2つの数値を足すコードを学んだ場合は、引き算や掛け算へ変更してみましょう。さらに、ユーザーが入力した数値を計算するように書き換えることで、複数の文法を組み合わせる練習になります。
2. C# sample codeを動かすための開発環境準備
2-1. Visual StudioでC#コードを実行する方法
Visual Studioは、C#の開発機能がまとまった統合開発環境です。コード補完、デバッグ、プロジェクト管理などの機能が用意されているため、初心者でも利用しやすい環境です。
Visual Studioでコンソールアプリを作成する基本手順は次のとおりです。
Visual Studioを起動する
「新しいプロジェクトの作成」を選ぶ
「コンソール アプリ」を選ぶ
プロジェクト名と保存場所を指定する
使用する.NETを選ぶ
Program.csへサンプルコードを貼り付ける実行ボタン、または
Ctrl+F5を押す
デバッグしながら実行したい場合はF5、デバッグなしで実行したい場合はCtrl+F5を使用します。
2-2. Visual Studio CodeでC#コードを実行する方法
Visual Studio Codeは軽量なコードエディターです。C#の開発に使用する場合は、.NET SDKとC#開発用の拡張機能を準備します。
基本的な流れは次のとおりです。
Visual Studio Codeをインストールする
.NET SDKをインストールする
C#開発用の拡張機能をインストールする
ターミナルでプロジェクトを作成する
作成したフォルダーをVisual Studio Codeで開く
Program.csを編集するターミナルから
dotnet runを実行する
Visual Studio Codeでは、画面上部のメニューからターミナルを開けます。コマンド操作にも慣れたい方に適した環境です。
2-3. .NET SDKのインストール確認方法
.NET SDKが利用できるかどうかは、ターミナルまたはコマンドプロンプトで次のコマンドを実行すると確認できます。
Bashdotnet --version
バージョン番号が表示されれば、.NET SDKを利用できます。インストール済みのSDKを一覧表示したい場合は、次のコマンドを使います。
Bashdotnet --list-sdks
dotnetコマンドが見つからないというエラーが表示される場合は、.NET SDKが未インストールであるか、環境変数へ正しく登録されていない可能性があります。
2-4. コンソールアプリの作成と実行手順
コマンドで新しいコンソールアプリを作成する場合は、次のように実行します。
Bashdotnet new console -n SampleApp
cd SampleApp
dotnet run
dotnet new consoleはコンソールアプリのひな型を作成するコマンドです。-n SampleAppでプロジェクト名を指定しています。
作成されたProgram.csを次のように変更します。
C#Console.WriteLine("C# sample codeを実行しました。");
保存後に次のコマンドを実行します。
Bashdotnet run
画面に文字列が表示されれば、開発環境の準備は完了です。
2-5. サンプルコードが動かないときの基本チェック
コードが動かない場合は、最初にエラーメッセージの先頭付近を確認します。複数のエラーが表示されても、最初の1件を修正すると残りも解消されることがあります。
次の項目を順番に確認しましょう。
ファイルを保存したか
正しいプロジェクトフォルダーで
dotnet runを実行しているかセミコロン
;が抜けていないか括弧や波括弧が閉じられているか
大文字と小文字が一致しているか
クラス名や変数名が重複していないか
必要なパッケージや名前空間が利用可能か
エラー文をすべて理解できなくても、ファイル名、行番号、エラーコードを確認すれば、問題の場所を絞り込めます。
3. C#基本文法のsample code
3-1. Hello Worldを表示するサンプルコード
最初に、コンソールへ文字列を表示するC# sample codeを実行してみましょう。
C#Console.WriteLine("Hello, World!");
Console.WriteLineは、指定した値を画面へ表示した後に改行する命令です。改行せずに表示したい場合はConsole.Writeを使います。
C#Console.Write("Hello, ");
Console.Write("C#!");
実行結果は次のようになります。
Hello, C#!
3-2. 変数とデータ型のサンプルコード
変数は、文字列や数値などのデータを一時的に保存するために使います。
C#string name = "田中";
int age = 25;
double height = 170.5;
bool isStudent = false;
Console.WriteLine(name);
Console.WriteLine(age);
Console.WriteLine(height);
Console.WriteLine(isStudent);
代表的なデータ型には次のものがあります。
string:文字列int:整数double:小数decimal:金額など精度を重視する小数bool:trueまたはfalsechar:1文字
型をコンパイラーに推論させるvarも使用できます。
C#var productName = "ノートPC";
var price = 98000;
Console.WriteLine($"{productName}: {price}円");
varを使っても、変数の型が後から自由に変わるわけではありません。上のpriceは整数型として扱われます。
3-3. 文字列を扱うサンプルコード
文字列同士は+で連結できます。
C#string firstName = "太郎";
string lastName = "山田";
string fullName = lastName + " " + firstName;
Console.WriteLine(fullName);
C#では、文字列補間を使うと変数を読みやすく埋め込めます。
C#string name = "佐藤";
int age = 30;
Console.WriteLine($"名前は{name}、年齢は{age}歳です。");
複数行の文字列は、raw string literalを利用すると読みやすく記述できます。
C#string message = """
1行目のメッセージ
2行目のメッセージ
3行目のメッセージ
""";
Console.WriteLine(message);
3-4. 数値計算を行うサンプルコード
C#では、四則演算や余りの計算ができます。
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); // 余り
整数同士を割ると、小数部分は切り捨てられます。小数まで求める場合は、片方をdoubleへ変換します。
C#int a = 10;
int b = 3;
double result = (double)a / b;
Console.WriteLine(result);
金額計算ではdecimalを使うことがあります。
C#decimal price = 1200m;
decimal taxRate = 0.1m;
decimal total = price * (1 + taxRate);
Console.WriteLine($"{total}円");
decimal型の数値には、末尾にmまたはMを付けます。
3-5. bool型と条件判定のサンプルコード
bool型には、真を表すtrueまたは偽を表すfalseが入ります。
C#int age = 20;
bool isAdult = age >= 18;
Console.WriteLine(isAdult);
複数の条件を組み合わせることもできます。
C#int age = 25;
bool hasTicket = true;
bool canEnter = age >= 18 && hasTicket;
Console.WriteLine(canEnter);
主な論理演算子は次のとおりです。
&&:両方がtrue||:どちらかがtrue!:trueとfalseを反転
C#bool isMember = false;
if (!isMember)
{
Console.WriteLine("会員登録が必要です。");
}
3-6. コメントの書き方サンプルコード
コメントは、コードの説明や注意事項を残すために使います。プログラムの処理には影響しません。
C#// 1行コメント
int price = 1000;
/*
複数行のコメントです。
税込み価格を計算します。
*/
double total = price * 1.1;
Console.WriteLine(total);
XMLドキュメントコメントを使うと、メソッドやクラスの説明を開発ツール上に表示できます。
C#/// <summary>
/// 2つの整数を加算します。
/// </summary>
/// <param name="a">1つ目の整数</param>
/// <param name="b">2つ目の整数</param>
/// <returns>加算結果</returns>
static int Add(int a, int b)
{
return a + b;
}
コメントには、コードを読めば分かる内容ではなく、処理の理由や注意点を書くと役立ちます。
4. 条件分岐と繰り返し処理のC# sample code
4-1. if文のサンプルコード
if文は、条件が成立したときだけ処理を実行します。
C#int score = 80;
if (score >= 60)
{
Console.WriteLine("合格です。");
}
条件が成立しなかった場合の処理は、elseで記述します。
C#int score = 50;
if (score >= 60)
{
Console.WriteLine("合格です。");
}
else
{
Console.WriteLine("不合格です。");
}
4-2. else if文のサンプルコード
複数の条件を順番に判定する場合は、else ifを使います。
C#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("再学習が必要です。");
}
上から順番に条件が確認され、最初に成立したブロックだけが実行されます。そのため、点数のような範囲判定では、大きな値から順番に条件を書くのが基本です。
4-3. switch文のサンプルコード
switch文は、1つの値に応じて処理を分ける場合に便利です。
C#string command = "start";
switch (command)
{
case "start":
Console.WriteLine("処理を開始します。");
break;
case "stop":
Console.WriteLine("処理を停止します。");
break;
case "exit":
Console.WriteLine("プログラムを終了します。");
break;
default:
Console.WriteLine("不明なコマンドです。");
break;
}
switch式を使うと、値の判定結果を簡潔に代入できます。
C#int score = 75;
string rank = score switch
{
>= 90 => "A",
>= 80 => "B",
>= 70 => "C",
_ => "D"
};
Console.WriteLine(rank);
4-4. for文のサンプルコード
for文は、回数が決まっている繰り返し処理に適しています。
C#for (int i = 1; i <= 5; i++)
{
Console.WriteLine($"{i}回目の処理");
}
配列のインデックスを使って値を取り出すこともできます。
C#string[] fruits = { "りんご", "バナナ", "みかん" };
for (int i = 0; i < fruits.Length; i++)
{
Console.WriteLine($"{i}: {fruits[i]}");
}
配列のインデックスは0から始まるため、終了条件はi < fruits.Lengthとします。
4-5. while文のサンプルコード
while文は、条件が成立している間、処理を繰り返します。
C#int count = 1;
while (count <= 3)
{
Console.WriteLine($"count = {count}");
count++;
}
条件が常にtrueになると無限ループになるため、ループ内で条件に使う値を更新する必要があります。
ユーザーがexitと入力するまで繰り返す例は次のとおりです。
C#while (true)
{
Console.Write("コマンドを入力してください: ");
string? input = Console.ReadLine();
if (input == "exit")
{
break;
}
Console.WriteLine($"入力内容: {input}");
}
4-6. foreach文のサンプルコード
foreach文は、配列やListのすべての要素を順番に処理するときに使います。
C#string[] colors = { "赤", "青", "緑" };
foreach (string color in colors)
{
Console.WriteLine(color);
}
Listに対しても同じように使えます。
C#List<int> numbers = new() { 10, 20, 30 };
foreach (int number in numbers)
{
Console.WriteLine(number);
}
インデックスが不要で、すべての要素を読み取るだけなら、for文よりforeach文のほうが簡潔です。
4-7. breakとcontinueのサンプルコード
breakはループを終了し、continueは現在の回だけを飛ばして次の繰り返しへ進みます。
C#for (int i = 1; i <= 10; i++)
{
if (i == 3)
{
continue;
}
if (i == 8)
{
break;
}
Console.WriteLine(i);
}
このコードでは、3のときは表示処理を飛ばし、8になった時点でループを終了します。そのため、1、2、4、5、6、7が表示されます。
5. 配列・List・DictionaryのC# sample code
5-1. 配列を作成・表示するサンプルコード
配列は、同じ型の値をまとめて管理するために使います。
C#string[] names = { "田中", "佐藤", "鈴木" };
Console.WriteLine(names[0]);
Console.WriteLine(names[1]);
Console.WriteLine(names[2]);
要素数を指定して作成することもできます。
C#int[] scores = new int[3];
scores[0] = 80;
scores[1] = 90;
scores[2] = 75;
foreach (int score in scores)
{
Console.WriteLine(score);
}
配列は作成後に要素数を変更できません。要素を頻繁に追加・削除する場合はListが適しています。
5-2. Listに追加・削除・検索するサンプルコード
Listは、要素数を変更できるコレクションです。
C#List<string> fruits = new();
fruits.Add("りんご");
fruits.Add("バナナ");
fruits.Add("みかん");
fruits.Remove("バナナ");
bool containsApple = fruits.Contains("りんご");
Console.WriteLine($"りんごを含む: {containsApple}");
foreach (string fruit in fruits)
{
Console.WriteLine(fruit);
}
条件に一致する要素を検索するにはFindを利用できます。
C#List<int> numbers = new() { 5, 12, 8, 20 };
int found = numbers.Find(number => number >= 10);
Console.WriteLine(found);
一致するすべての要素を取得する場合はFindAllを使います。
C#List<int> numbers = new() { 5, 12, 8, 20 };
List<int> results = numbers.FindAll(number => number >= 10);
foreach (int number in results)
{
Console.WriteLine(number);
}
5-3. Dictionaryでキーと値を扱うサンプルコード
Dictionaryは、キーと値を組み合わせて管理するコレクションです。
C#Dictionary<string, int> prices = new()
{
["apple"] = 150,
["banana"] = 100,
["orange"] = 120
};
Console.WriteLine(prices["apple"]);
存在しないキーを[]で取得すると例外が発生します。安全に取り出すにはTryGetValueを使用します。
C#Dictionary<string, int> prices = new()
{
["apple"] = 150,
["banana"] = 100
};
if (prices.TryGetValue("apple", out int price))
{
Console.WriteLine($"価格は{price}円です。");
}
else
{
Console.WriteLine("商品が見つかりません。");
}
キーと値をまとめてループ処理できます。
C#foreach (KeyValuePair<string, int> item in prices)
{
Console.WriteLine($"{item.Key}: {item.Value}円");
}
5-4. 配列やListをループ処理するサンプルコード
配列やListの各要素を処理する基本形はforeachです。
C#List<int> scores = new() { 70, 85, 90 };
int total = 0;
foreach (int score in scores)
{
total += score;
}
double average = (double)total / scores.Count;
Console.WriteLine($"平均点: {average}");
インデックスも必要な場合はfor文を使います。
C#List<string> tasks = new()
{
"メール確認",
"資料作成",
"会議"
};
for (int i = 0; i < tasks.Count; i++)
{
Console.WriteLine($"{i + 1}. {tasks[i]}");
}
5-5. コレクションを並び替えるサンプルコード
Listを昇順に並び替えるにはSortを使います。
C#List<int> numbers = new() { 30, 10, 20 };
numbers.Sort();
foreach (int number in numbers)
{
Console.WriteLine(number);
}
降順にする場合は、並び替えた後にReverseを実行できます。
C#List<int> numbers = new() { 30, 10, 20 };
numbers.Sort();
numbers.Reverse();
foreach (int number in numbers)
{
Console.WriteLine(number);
}
元のListを変更せずに並び替えた結果を取得したい場合はLINQを使います。
C#List<int> numbers = new() { 30, 10, 20 };
List<int> sortedNumbers = numbers
.OrderBy(number => number)
.ToList();
Console.WriteLine(string.Join(", ", sortedNumbers));
6. メソッド・クラス・オブジェクト指向のC# sample code
6-1. メソッドを定義して呼び出すサンプルコード
メソッドは、複数の処理をひとまとまりにしたものです。同じ処理を繰り返し使う場合に役立ちます。
C#ShowMessage();
ShowMessage();
static void ShowMessage()
{
Console.WriteLine("メソッドが呼び出されました。");
}
voidは、呼び出し元へ値を返さないメソッドであることを表します。
6-2. 引数と戻り値を使うサンプルコード
メソッドへ値を渡す仕組みが引数です。処理結果を呼び出し元へ返すにはreturnを使います。
C#int result = Add(10, 20);
Console.WriteLine(result);
static int Add(int a, int b)
{
return a + b;
}
引数には、呼び出し時に省略できる既定値も設定できます。
C#Greet("山田");
Greet("佐藤", "こんばんは");
static void Greet(string name, string message = "こんにちは")
{
Console.WriteLine($"{message}、{name}さん。");
}
6-3. クラスを作成するサンプルコード
クラスは、データと処理をまとめた設計図です。
C#Person person = new();
person.Name = "田中";
person.Age = 25;
person.Introduce();
class Person
{
public string Name { get; set; } = "";
public int Age { get; set; }
public void Introduce()
{
Console.WriteLine($"私は{Name}です。{Age}歳です。");
}
}
Personクラスには、NameとAgeというデータと、自己紹介を表示するIntroduceメソッドがあります。
6-4. インスタンスを生成するサンプルコード
クラスをもとに作成した実体をインスタンスと呼びます。newを使って生成します。
C#Product product1 = new();
product1.Name = "キーボード";
product1.Price = 5000;
Product product2 = new();
product2.Name = "マウス";
product2.Price = 3000;
product1.ShowDetails();
product2.ShowDetails();
class Product
{
public string Name { get; set; } = "";
public int Price { get; set; }
public void ShowDetails()
{
Console.WriteLine($"{Name}: {Price}円");
}
}
同じクラスから複数のインスタンスを作成でき、それぞれが異なるデータを保持できます。
6-5. プロパティを使うサンプルコード
プロパティは、クラスが持つ値を取得・設定するための仕組みです。
C#User user = new();
user.Name = "鈴木";
user.Age = 28;
Console.WriteLine(user.Name);
Console.WriteLine(user.Age);
class User
{
public string Name { get; set; } = "";
public int Age { get; set; }
}
設定時に値を検証することもできます。
C#Temperature temperature = new();
temperature.Celsius = 25;
Console.WriteLine(temperature.Celsius);
class Temperature
{
private double _celsius;
public double Celsius
{
get
{
return _celsius;
}
set
{
if (value < -273.15)
{
throw new ArgumentOutOfRangeException(
nameof(value),
"絶対零度より低い温度は設定できません。");
}
_celsius = value;
}
}
}
6-6. コンストラクタを使うサンプルコード
コンストラクタは、インスタンスの生成時に呼び出される特別な処理です。初期値を設定するときに使います。
C#Book book = new("C#入門", 2800);
book.ShowDetails();
class Book
{
public string Title { get; }
public int Price { get; }
public Book(string title, int price)
{
Title = title;
Price = price;
}
public void ShowDetails()
{
Console.WriteLine($"{Title}: {Price}円");
}
}
コンストラクタ名はクラス名と同じにし、戻り値の型は記述しません。
6-7. 継承のサンプルコード
継承を使うと、既存クラスの機能を引き継いだ新しいクラスを作成できます。
C#Dog dog = new();
dog.Name = "ポチ";
dog.Eat();
dog.Bark();
class Animal
{
public string Name { get; set; } = "";
public void Eat()
{
Console.WriteLine($"{Name}が食事をしています。");
}
}
class Dog : Animal
{
public void Bark()
{
Console.WriteLine($"{Name}がワンと鳴きました。");
}
}
Dog : Animalと書くことで、DogクラスがAnimalクラスを継承します。
基底クラスのメソッドを派生クラスで変更する場合は、virtualとoverrideを使います。
C#Animal animal = new Dog();
animal.Speak();
class Animal
{
public virtual void Speak()
{
Console.WriteLine("動物が鳴きます。");
}
}
class Dog : Animal
{
public override void Speak()
{
Console.WriteLine("ワン");
}
}
6-8. インターフェースのサンプルコード
インターフェースは、クラスが実装すべき機能の形式を定義します。
C#IPrintable document = new Document();
document.Print();
interface IPrintable
{
void Print();
}
class Document : IPrintable
{
public void Print()
{
Console.WriteLine("ドキュメントを印刷します。");
}
}
複数のクラスへ共通の操作を持たせたいときに便利です。
C#List<INotifier> notifiers = new()
{
new EmailNotifier(),
new SmsNotifier()
};
foreach (INotifier notifier in notifiers)
{
notifier.Send("処理が完了しました。");
}
interface INotifier
{
void Send(string message);
}
class EmailNotifier : INotifier
{
public void Send(string message)
{
Console.WriteLine($"メール送信: {message}");
}
}
class SmsNotifier : INotifier
{
public void Send(string message)
{
Console.WriteLine($"SMS送信: {message}");
}
}
7. 実務で使えるC# sample code集
7-1. 現在日時を取得するサンプルコード
現在のローカル日時はDateTime.Nowで取得できます。
C#DateTime now = DateTime.Now;
Console.WriteLine(now);
Console.WriteLine(now.ToString("yyyy/MM/dd HH:mm:ss"));
UTC日時を取得する場合はDateTime.UtcNowを使用します。
C#DateTime utcNow = DateTime.UtcNow;
Console.WriteLine(utcNow);
日時の加算や差分計算もできます。
C#DateTime today = DateTime.Today;
DateTime oneWeekLater = today.AddDays(7);
Console.WriteLine($"今日: {today:yyyy/MM/dd}");
Console.WriteLine($"1週間後: {oneWeekLater:yyyy/MM/dd}");
TimeSpan difference = oneWeekLater - today;
Console.WriteLine($"差: {difference.Days}日");
7-2. 文字列を分割・置換・検索するサンプルコード
カンマ区切りの文字列を分割するにはSplitを使います。
C#string text = "apple,banana,orange";
string[] fruits = text.Split(',');
foreach (string fruit in fruits)
{
Console.WriteLine(fruit);
}
文字列の置換にはReplaceを使います。
C#string message = "今日は晴れです。";
string replaced = message.Replace("晴れ", "雨");
Console.WriteLine(replaced);
特定の文字列を含むかどうかはContainsで確認できます。
C#string title = "C# sample code入門";
if (title.Contains("sample code"))
{
Console.WriteLine("検索文字列が見つかりました。");
}
前後の空白を削除するにはTrimを使います。
C#string input = " C#入門 ";
string trimmed = input.Trim();
Console.WriteLine($"[{trimmed}]");
7-3. ファイルを読み込むサンプルコード
テキストファイル全体を読み込むにはFile.ReadAllTextを使います。
C#string path = "sample.txt";
if (File.Exists(path))
{
string content = File.ReadAllText(path);
Console.WriteLine(content);
}
else
{
Console.WriteLine("ファイルが見つかりません。");
}
非同期で読み込む場合はFile.ReadAllTextAsyncを使います。
C#string path = "sample.txt";
if (File.Exists(path))
{
string content = await File.ReadAllTextAsync(path);
Console.WriteLine(content);
}
行ごとの配列として読み込むこともできます。
C#string[] lines = await File.ReadAllLinesAsync("sample.txt");
foreach (string line in lines)
{
Console.WriteLine(line);
}
7-4. ファイルに書き込むサンプルコード
ファイルへ文字列を書き込むにはFile.WriteAllTextを使います。
C#string path = "output.txt";
string content = "C#でファイルを書き込みました。";
File.WriteAllText(path, content);
Console.WriteLine("保存しました。");
同じファイルへ追記する場合はFile.AppendAllTextを使います。
C#string log = $"{DateTime.Now:yyyy-MM-dd HH:mm:ss} 処理完了{Environment.NewLine}";
File.AppendAllText("app.log", log);
非同期で保存する例は次のとおりです。
C#string content = "非同期で保存するテキストです。";
await File.WriteAllTextAsync("output.txt", content);
Console.WriteLine("保存が完了しました。");
7-5. 例外処理try-catchのサンプルコード
実行時に発生するエラーへ対応するには、try-catchを使います。
C#try
{
Console.Write("整数を入力してください: ");
string? input = Console.ReadLine();
int number = int.Parse(input!);
Console.WriteLine($"入力値は{number}です。");
}
catch (FormatException)
{
Console.WriteLine("整数として読み取れませんでした。");
}
複数の例外を分けて処理できます。
C#try
{
string content = File.ReadAllText("data.txt");
Console.WriteLine(content);
}
catch (FileNotFoundException)
{
Console.WriteLine("ファイルが見つかりません。");
}
catch (UnauthorizedAccessException)
{
Console.WriteLine("ファイルを読み取る権限がありません。");
}
catch (IOException ex)
{
Console.WriteLine($"入出力エラー: {ex.Message}");
}
例外の有無にかかわらず実行したい処理はfinallyへ記述します。
C#try
{
Console.WriteLine("処理を開始します。");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
Console.WriteLine("終了処理を実行します。");
}
7-6. LINQでデータを絞り込むサンプルコード
LINQを使うと、配列やListから条件に一致するデータを簡潔に取得できます。
C#List<int> numbers = new() { 1, 2, 3, 4, 5, 6 };
List<int> evenNumbers = numbers
.Where(number => number % 2 == 0)
.ToList();
Console.WriteLine(string.Join(", ", evenNumbers));
絞り込み、並び替え、変換を組み合わせることもできます。
C#List<Product> products = new()
{
new Product("キーボード", 5000),
new Product("マウス", 3000),
new Product("モニター", 25000)
};
List<string> names = products
.Where(product => product.Price >= 5000)
.OrderBy(product => product.Price)
.Select(product => product.Name)
.ToList();
Console.WriteLine(string.Join(", ", names));
record Product(string Name, int Price);
集計処理も簡単に記述できます。
C#List<int> scores = new() { 70, 80, 90 };
Console.WriteLine($"合計: {scores.Sum()}");
Console.WriteLine($"平均: {scores.Average()}");
Console.WriteLine($"最大: {scores.Max()}");
Console.WriteLine($"最小: {scores.Min()}");
7-7. JSONを読み書きするサンプルコード
System.Text.Jsonを使うと、C#オブジェクトをJSONへ変換できます。
C#using System.Text.Json;
User user = new()
{
Name = "山田",
Age = 30
};
string json = JsonSerializer.Serialize(
user,
new JsonSerializerOptions
{
WriteIndented = true
});
Console.WriteLine(json);
class User
{
public string Name { get; set; } = "";
public int Age { get; set; }
}
JSONからC#オブジェクトへ変換する処理は次のとおりです。
C#using System.Text.Json;
string json = """
{
"Name": "佐藤",
"Age": 25
}
""";
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をファイルへ保存することもできます。
C#using System.Text.Json;
User user = new()
{
Name = "鈴木",
Age = 28
};
string json = JsonSerializer.Serialize(user);
await File.WriteAllTextAsync("user.json", json);
class User
{
public string Name { get; set; } = "";
public int Age { get; set; }
}
7-8. HTTPリクエストを送信するサンプルコード
HttpClientを使うと、Web APIなどへHTTPリクエストを送信できます。
C#using HttpClient client = new();
try
{
string response = await client.GetStringAsync(
"https://example.com");
Console.WriteLine(response);
}
catch (HttpRequestException ex)
{
Console.WriteLine($"通信エラー: {ex.Message}");
}
HTTPステータスを確認する例は次のとおりです。
C#using HttpClient client = new();
try
{
using 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.StatusCode}");
}
}
catch (HttpRequestException ex)
{
Console.WriteLine($"通信に失敗しました: {ex.Message}");
}
JSONをPOSTする場合は、JsonContent.Createを利用できます。
C#using System.Net.Http.Json;
using HttpClient client = new();
var data = new
{
title = "C# sample code",
completed = false
};
using HttpResponseMessage response = await client.PostAsJsonAsync(
"https://example.com/api/tasks",
data);
Console.WriteLine(response.StatusCode);
実際の開発では、接続先APIの仕様、認証、タイムアウト、キャンセル、リトライなども考慮する必要があります。
8. 初心者がつまずきやすいC# sample codeのエラー対策
8-1. コンパイルエラーの読み方
コンパイルエラーとは、コードを実行可能な形式へ変換できないときに表示されるエラーです。代表的な原因には、記号の不足、変数名の間違い、型の不一致があります。
たとえば、次のコードにはセミコロンがありません。
C#int number = 10
Console.WriteLine(number);
正しくは次のとおりです。
C#int number = 10;
Console.WriteLine(number);
エラーには、一般的に次の情報が含まれます。
エラーコード
エラー内容
ファイル名
行番号
列番号
表示された行だけでなく、その直前の行に原因がある場合もあります。特に、セミコロン、ダブルクォーテーション、括弧の閉じ忘れを確認しましょう。
8-2. 型変換エラーの解決方法
文字列を整数型へ直接代入することはできません。
C#// コンパイルエラー
// int age = "20";
整数へ変換する場合はint.Parseまたはint.TryParseを使います。
C#string text = "20";
int age = int.Parse(text);
Console.WriteLine(age);
ユーザー入力や外部データは、数値に変換できるとは限りません。安全に処理するにはTryParseがおすすめです。
C#Console.Write("年齢を入力してください: ");
string? input = Console.ReadLine();
if (int.TryParse(input, out int age))
{
Console.WriteLine($"10年後は{age + 10}歳です。");
}
else
{
Console.WriteLine("整数を入力してください。");
}
数値を文字列へ変換する場合はToStringや文字列補間を使います。
C#int price = 1500;
string text1 = price.ToString();
string text2 = $"{price}円";
Console.WriteLine(text1);
Console.WriteLine(text2);
8-3. NullReferenceExceptionの原因と対策
NullReferenceExceptionは、参照先が存在しないnullの値に対して、プロパティやメソッドを使ったときに発生します。
C#string? name = null;
// 実行時エラーになる可能性がある
// Console.WriteLine(name.Length);
nullではないことを確認してから処理します。
C#string? name = null;
if (name is not null)
{
Console.WriteLine(name.Length);
}
else
{
Console.WriteLine("名前が設定されていません。");
}
null条件演算子?.を使う方法もあります。
C#string? name = null;
int? length = name?.Length;
Console.WriteLine(length ?? 0);
null合体演算子??を使うと、値がnullだった場合の代替値を指定できます。
C#string? input = Console.ReadLine();
string value = input ?? "未入力";
Console.WriteLine(value);
安易にnull許容警告を無視するのではなく、どの処理でnullが発生し得るかを確認することが重要です。
8-4. usingが不足している場合の対処法
クラスやメソッドが見つからない場合は、必要な名前空間のusingが不足している可能性があります。
たとえば、JSON処理でJsonSerializerを使用する場合は、次の記述が必要です。
C#using System.Text.Json;
HTTPのJSON拡張メソッドを使う場合は、次の名前空間を利用します。
C#using System.Net.Http.Json;
ただし、プロジェクトの設定によっては暗黙的なusingが有効になっており、SystemやSystem.Collections.Genericなどを省略できる場合があります。
IDEのクイック修正機能を使うと、必要なusingを自動追加できることがあります。それでも解決しない場合は、必要なNuGetパッケージがインストールされているか確認しましょう。
8-5. サンプルコードを貼り付けても動かない原因
C# sample codeを貼り付けても動かない場合、コード自体ではなく、貼り付け方や実行環境に原因があることがあります。
よくある原因は次のとおりです。
古いコードが
Program.csに残っている同じ変数名やクラス名を複数回定義している
クラスを別のクラスやメソッドの内側へ貼り付けている
トップレベルステートメントと従来形式を不適切に混在させている
サンプルが必要とする.NET機能に環境が対応していない
外部ファイルやAPIが存在しない
Windows専用機能を別のOSで実行している
Webアプリ用のコードをコンソールアプリへ貼り付けている
まず新しいコンソールプロジェクトを作り、サンプルコードだけを貼り付けて試すと原因を切り分けやすくなります。
9. C# sample codeを応用して小さなプログラムを作る
9-1. 電卓アプリのサンプルコード
次のコードは、2つの数値と演算子を入力して計算する簡単な電卓です。
C#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 firstNumber) ||
!double.TryParse(secondInput, out double secondNumber))
{
Console.WriteLine("数値を正しく入力してください。");
return;
}
double result;
switch (operation)
{
case "+":
result = firstNumber + secondNumber;
break;
case "-":
result = firstNumber - secondNumber;
break;
case "*":
result = firstNumber * secondNumber;
break;
case "/":
if (secondNumber == 0)
{
Console.WriteLine("0では割れません。");
return;
}
result = firstNumber / secondNumber;
break;
default:
Console.WriteLine("対応していない演算子です。");
return;
}
Console.WriteLine($"計算結果: {result}");
このサンプルでは、入力、型変換、条件分岐、switch文、ゼロ除算のチェックを組み合わせています。
9-2. 簡単なTODOリストのサンプルコード
次のC# sample codeは、タスクの追加、一覧表示、削除ができるTODOリストです。
C#List<string> tasks = new();
while (true)
{
Console.WriteLine();
Console.WriteLine("1: タスク追加");
Console.WriteLine("2: 一覧表示");
Console.WriteLine("3: タスク削除");
Console.WriteLine("0: 終了");
Console.Write("操作を選択してください: ");
string? command = Console.ReadLine();
switch (command)
{
case "1":
Console.Write("タスク名を入力してください: ");
string? task = Console.ReadLine();
if (!string.IsNullOrWhiteSpace(task))
{
tasks.Add(task);
Console.WriteLine("タスクを追加しました。");
}
else
{
Console.WriteLine("タスク名が空です。");
}
break;
case "2":
if (tasks.Count == 0)
{
Console.WriteLine("タスクはありません。");
break;
}
for (int i = 0; i < tasks.Count; i++)
{
Console.WriteLine($"{i + 1}. {tasks[i]}");
}
break;
case "3":
Console.Write("削除するタスク番号を入力してください: ");
string? indexInput = Console.ReadLine();
if (int.TryParse(indexInput, out int taskNumber) &&
taskNumber >= 1 &&
taskNumber <= tasks.Count)
{
string removedTask = tasks[taskNumber - 1];
tasks.RemoveAt(taskNumber - 1);
Console.WriteLine($"「{removedTask}」を削除しました。");
}
else
{
Console.WriteLine("正しいタスク番号を入力してください。");
}
break;
case "0":
Console.WriteLine("終了します。");
return;
default:
Console.WriteLine("メニューから操作を選択してください。");
break;
}
}
9-3. ファイル保存付きメモアプリのサンプルコード
次のサンプルでは、入力したメモをファイルへ保存し、後から読み込めます。
C#const string FilePath = "memo.txt";
while (true)
{
Console.WriteLine();
Console.WriteLine("1: メモを書く");
Console.WriteLine("2: メモを読む");
Console.WriteLine("0: 終了");
Console.Write("操作を選択してください: ");
string? command = Console.ReadLine();
switch (command)
{
case "1":
Console.Write("メモを入力してください: ");
string? memo = Console.ReadLine();
if (string.IsNullOrWhiteSpace(memo))
{
Console.WriteLine("メモが空です。");
break;
}
string line =
$"{DateTime.Now:yyyy-MM-dd HH:mm:ss} {memo}" +
Environment.NewLine;
await File.AppendAllTextAsync(FilePath, line);
Console.WriteLine("メモを保存しました。");
break;
case "2":
if (!File.Exists(FilePath))
{
Console.WriteLine("保存されたメモはありません。");
break;
}
string content = await File.ReadAllTextAsync(FilePath);
Console.WriteLine("--- メモ一覧 ---");
Console.WriteLine(content);
break;
case "0":
return;
default:
Console.WriteLine("正しい操作を選択してください。");
break;
}
}
実用性を高めるには、メモの削除、キーワード検索、JSON形式での保存などを追加してみましょう。
9-4. ランダムな数を使ったゲームのサンプルコード
次のコードは、1から100までのランダムな正解数を当てるゲームです。
C#Random random = new();
int answer = random.Next(1, 101);
int attemptCount = 0;
Console.WriteLine("1から100までの数を当ててください。");
while (true)
{
Console.Write("予想した数: ");
string? input = Console.ReadLine();
if (!int.TryParse(input, out int guess))
{
Console.WriteLine("整数を入力してください。");
continue;
}
if (guess < 1 || guess > 100)
{
Console.WriteLine("1から100までの範囲で入力してください。");
continue;
}
attemptCount++;
if (guess < answer)
{
Console.WriteLine("もっと大きい数です。");
}
else if (guess > answer)
{
Console.WriteLine("もっと小さい数です。");
}
else
{
Console.WriteLine(
$"正解です。{attemptCount}回で当たりました。");
break;
}
}
難易度を上げる場合は、試行回数の上限や制限時間を追加できます。
9-5. 入力値チェック付きフォーム処理のサンプルコード
コンソール上で名前、年齢、メールアドレスを入力し、内容を検証する例です。Webフォームやデスクトップフォームでも、基本的な考え方は同じです。
C#Console.Write("名前を入力してください: ");
string? name = Console.ReadLine();
Console.Write("年齢を入力してください: ");
string? ageInput = Console.ReadLine();
Console.Write("メールアドレスを入力してください: ");
string? email = Console.ReadLine();
List<string> errors = new();
if (string.IsNullOrWhiteSpace(name))
{
errors.Add("名前は必須です。");
}
else if (name.Length > 50)
{
errors.Add("名前は50文字以内で入力してください。");
}
if (!int.TryParse(ageInput, out int age))
{
errors.Add("年齢は整数で入力してください。");
}
else if (age < 0 || age > 150)
{
errors.Add("年齢は0から150までの範囲で入力してください。");
}
if (string.IsNullOrWhiteSpace(email))
{
errors.Add("メールアドレスは必須です。");
}
else if (!email.Contains('@'))
{
errors.Add("メールアドレスの形式を確認してください。");
}
if (errors.Count > 0)
{
Console.WriteLine("--- 入力エラー ---");
foreach (string error in errors)
{
Console.WriteLine($"・{error}");
}
return;
}
Console.WriteLine("--- 登録内容 ---");
Console.WriteLine($"名前: {name}");
Console.WriteLine($"年齢: {age}");
Console.WriteLine($"メールアドレス: {email}");
実際のシステムでは、メールアドレスの形式確認だけでなく、文字数制限、禁止文字、重複登録、サーバー側での再検証も必要です。
10. C# sample codeに関するよくある質問
10-1. C#初心者はどのサンプルコードから学ぶべき?
最初は、次の順番で学ぶのがおすすめです。
Hello World
変数とデータ型
文字列と数値計算
if文
for文とforeach文
配列とList
メソッド
クラス
例外処理
ファイル操作やLINQ
最初から高度なWeb APIやデータベース処理へ進むよりも、変数、条件分岐、繰り返し、メソッドを使えるようにすることが大切です。これらは、ほぼすべてのC#プログラムで利用します。
10-2. sample codeをコピペするだけでも勉強になる?
コピペして実行することは、学習の入り口として有効です。ただし、そのまま動かすだけでは理解が定着しにくいため、少なくとも1か所は変更しましょう。
たとえば、次のような変更がおすすめです。
表示する文字列を変える
数値や条件式を変える
Listの要素を増やす
メソッドの引数を追加する
エラーが発生する値を試す
入力処理を追加する
コードを変更した結果を予想してから実行すると、文法と動作の関係を理解しやすくなります。
10-3. C#とJavaのサンプルコードはどこが違う?
C#とJavaは、クラス、継承、インターフェース、例外処理など、似た文法を多く持っています。一方で、標準ライブラリや開発基盤、プロパティ、LINQなどに違いがあります。
C#では、プロパティを次のように記述できます。
C#public string Name { get; set; } = "";
Javaでは、一般的にフィールドとgetter・setterを個別に定義します。また、C#にはLINQがあり、コレクション操作を統一的な記述で行えます。
C#List<int> results = numbers
.Where(number => number >= 10)
.OrderBy(number => number)
.ToList();
見た目が似ていても、クラス名、メソッド名、パッケージや名前空間の仕組みが異なるため、JavaのコードをそのままC#へ貼り付けることはできません。
10-4. 古いC#コードと新しいC#コードの違いは?
古いC#のサンプルでは、ProgramクラスとMainメソッドを明示する形式が一般的です。
C#using System;
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
}
}
新しい形式のコンソールアプリでは、トップレベルステートメントを利用して簡潔に書けます。
C#Console.WriteLine("Hello, World!");
どちらもC#のコードですが、プロジェクトの設定や使用する言語バージョンによって利用できる記法が異なります。
新しいC#では、次のような簡潔な記法を見かけることがあります。
C#List<string> names = ["田中", "佐藤", "鈴木"];
一方、幅広い環境で理解しやすい従来形式は次のとおりです。
C#List<string> names = new()
{
"田中",
"佐藤",
"鈴木"
};
古いコードが直ちに間違いというわけではありません。サンプルの作成時期、対象の.NET、使用しているライブラリを確認することが重要です。
10-5. C# sample codeを実務レベルに近づけるには?
実務レベルへ近づけるには、「正常に動くコード」から「問題が起きても安全に処理できるコード」へ改善していく必要があります。
特に意識したい項目は次のとおりです。
入力値を検証する
nullの可能性を考慮する例外を適切に処理する
メソッドやクラスへ責務を分割する
分かりやすい変数名を付ける
設定値をコードへ直接埋め込まない
非同期処理を適切に利用する
ログを記録する
単体テストを書く
パスワードやAPIキーをソースコードへ書かない
たとえば、単純な数値変換でint.Parseを使うと、不正な入力時に例外が発生します。
C#int age = int.Parse(input);
入力値が保証されていない場面では、TryParseを使うほうが安全です。
C#if (!int.TryParse(input, out int age))
{
Console.WriteLine("年齢を正しく入力してください。");
return;
}
さらに、コード量が増えてきたら、入力、検証、計算、表示、保存を別々のメソッドやクラスへ分割します。サンプルコードを動かして終わりにせず、「不正な値が来たらどうなるか」「ファイルがなかったらどうなるか」と考えることが、実務的なコードを書く第一歩です。
まとめ
csharp sample codeを使った学習では、コードをコピーして実行するだけでなく、値や条件を変更し、処理結果を確認することが大切です。
C#初心者は、変数、条件分岐、繰り返し、配列、List、メソッドの順に基本を身につけましょう。その後、クラス、例外処理、ファイル操作、LINQ、JSON、HTTP通信へ進むと、実用的なプログラムを作りやすくなります。
学んだ文法は、電卓、TODOリスト、メモアプリ、数当てゲームなどの小さなプログラムへ組み合わせることで定着します。サンプルコードが動いたら、入力チェック、保存機能、検索機能、エラー処理などを追加し、自分の目的に合ったプログラムへ発展させていきましょう。

