C#のデータ型・変数・配列・リストを初心者向けにわかりやすく解説
はじめに
C#でプログラミングを学び始めると、最初に出てくる重要なテーマが「データ」です。C#では、数値、文字、文字列、真偽値など、さまざまなデータを扱いながらプログラムを作ります。
しかし初心者のうちは、「データ型とは何か」「変数と配列は何が違うのか」「Listはいつ使うのか」といった点で混乱しやすいです。
この記事では、C#のデータ型、変数、配列、リストについて、初心者にもわかりやすく解説します。基本的な考え方からコード例、よくあるエラーまで順番に説明するので、C#でデータを扱う基礎をしっかり身につけましょう。
1. C#の「データ」とは?初心者が最初に押さえる全体像
1-1. C#で扱うデータの基本概念
C#におけるデータとは、プログラムの中で扱う情報のことです。
たとえば、次のようなものはすべてデータです。
C#100
"こんにちは"
true
3.14
'A'
数字の 100、文字列の "こんにちは"、真偽値の true、小数の 3.14、1文字を表す 'A' は、それぞれ異なる種類のデータです。
C#では、データの種類を明確に区別します。この「データの種類」をデータ型といいます。
1-2. データ型・変数・配列・リストの関係
C#でデータを扱うときは、主に次の4つを理解することが大切です。
データ型は、データの種類を表します。たとえば、整数なら int、文字列なら string です。
変数は、データを入れておく箱のようなものです。
配列は、同じ型の複数のデータをまとめて扱う仕組みです。
リストは、配列より柔軟にデータを追加・削除できる仕組みです。
たとえば、1人の名前を扱うなら変数を使います。
C#string name = "田中";
複数人の名前を扱うなら、配列やリストを使います。
C#string[] names = { "田中", "佐藤", "鈴木" };
C#List<string> names = new List<string> { "田中", "佐藤", "鈴木" };
このように、C#では扱いたいデータの内容や数に応じて、変数、配列、リストを使い分けます。
1-3. 初心者がつまずきやすい「データ」と「値」の違い
「データ」と「値」は似た意味で使われますが、少し違います。
データは、プログラムで扱う情報全体を指します。一方で値は、実際に変数などに入っている具体的な中身を指します。
C#int age = 20;
この例では、int がデータ型、age が変数名、20 が値です。
つまり、「年齢というデータを扱うために、ageという変数に20という値を入れている」と考えるとわかりやすいです。
1-4. この記事で学べること
この記事では、C#のデータに関する基本として、データ型、変数、配列、リストを学びます。
それぞれを単独で理解するだけでなく、「どの場面で何を使えばよいのか」までわかるように解説します。
C#の基礎を学ぶうえで、データの扱い方は避けて通れません。ここを理解できると、条件分岐、繰り返し処理、クラス、データベース処理なども学びやすくなります。
2. C#のデータ型とは
2-1. データ型の役割
データ型とは、データの種類を表すものです。
C#では、変数を作るときに「どの種類のデータを入れるのか」を指定します。
C#int age = 25;
string name = "山田";
bool isStudent = true;
この例では、age は整数、name は文字列、isStudent は真偽値を扱う変数です。
データ型を指定することで、C#は「この変数にはどんなデータが入るのか」を判断できます。そのため、間違った型のデータを入れようとするとエラーになります。
C#int age = "二十五"; // エラー
int は整数を入れる型なので、文字列を代入することはできません。
2-2. 値型と参照型の違い
C#のデータ型は、大きく分けると値型と参照型があります。
値型は、変数の中に値そのものを持つ型です。代表的な値型には、int、double、bool、char などがあります。
C#int a = 10;
int b = a;
b = 20;
Console.WriteLine(a); // 10
Console.WriteLine(b); // 20
この例では、b = a とした時点で、a の値がコピーされます。その後 b を変更しても、a には影響しません。
参照型は、データそのものではなく、データがある場所への参照を持つ型です。代表的な参照型には、string、配列、List、クラスなどがあります。
C#int[] numbers1 = { 1, 2, 3 };
int[] numbers2 = numbers1;
numbers2[0] = 100;
Console.WriteLine(numbers1[0]); // 100
この例では、numbers1 と numbers2 が同じ配列を参照しています。そのため、numbers2 の要素を変更すると、numbers1 にも影響します。
2-3. 数値型:int、long、float、double、decimal
C#で数値データを扱う代表的な型には、次のようなものがあります。
int は整数を扱う型です。C#初心者が最もよく使う数値型です。
C#int score = 80;
long は、int より大きな整数を扱いたいときに使います。
C#long population = 125000000L;
float は小数を扱う型ですが、値の末尾に f を付けます。
C#float height = 170.5f;
double も小数を扱う型です。一般的な小数計算では double がよく使われます。
C#double temperature = 36.5;
decimal は、金額のように誤差をできるだけ避けたい数値に使われます。値の末尾に m を付けます。
C#decimal price = 1980.50m;
数値型は用途に応じて使い分けることが大切です。初心者のうちは、整数なら int、一般的な小数なら double、金額なら decimal と覚えるとよいでしょう。
2-4. 文字・文字列型:char、string
C#では、1文字を扱う場合は char、文字の集まりを扱う場合は string を使います。
char は1文字だけを表します。シングルクォーテーションで囲みます。
C#char grade = 'A';
string は文字列を表します。ダブルクォーテーションで囲みます。
C#string message = "こんにちは";
初心者が間違えやすいのは、char と string の囲み方です。
C#char letter = 'A'; // 正しい
string text = "A"; // 正しい
char wrong = "A"; // エラー
string wrong2 = 'A'; // エラー
char は1文字、string は文字列と覚えておきましょう。
2-5. 真偽値型:bool
bool は、真または偽を表すデータ型です。
入れられる値は true または false のどちらかです。
C#bool isLogin = true;
bool hasError = false;
bool は、条件分岐でよく使われます。
C#bool isAdult = true;
if (isAdult)
{
Console.WriteLine("成人です");
}
C#では、true と false は小文字で書きます。True や False と書くとエラーになるので注意しましょう。
2-6. object型とvarの基本
object 型は、C#のすべての型の元になる型です。さまざまな種類のデータを入れることができます。
C#object data1 = 100;
object data2 = "こんにちは";
object data3 = true;
ただし、object は何でも入れられる反面、使うときに型を意識しにくくなります。初心者のうちは、特別な理由がなければ具体的な型を使うほうがわかりやすいです。
一方、var は型推論を使う書き方です。右辺の値からC#が型を判断します。
C#var age = 20; // int
var name = "田中"; // string
var isActive = true; // bool
var は型がなくなるわけではありません。C#が自動で型を決めているだけです。
C#var age = 20;
age = "二十"; // エラー
この例では、最初に age は int と判断されているため、あとから文字列を入れることはできません。
2-7. nullを扱うデータ型と注意点
null は「何も参照していない」「値が存在しない」ことを表します。
参照型の変数には、null を入れることができます。
C#string name = null;
ただし、null の状態でメソッドやプロパティを使おうとすると、エラーになることがあります。
C#string name = null;
Console.WriteLine(name.Length); // エラー
また、通常の値型には null を入れられません。
C#int age = null; // エラー
値型で null を扱いたい場合は、? を付けて nullable 型にします。
C#int? age = null;
C#でデータを扱うときは、「この変数はnullになる可能性があるか」を意識することが重要です。
3. C#の変数とは
3-1. 変数の基本的な考え方
変数とは、データを一時的に入れておく箱のようなものです。
たとえば、ユーザーの名前や年齢、計算結果などをプログラム内で扱いたいときに変数を使います。
C#string name = "佐藤";
int age = 30;
この例では、name という変数に "佐藤"、age という変数に 30 が入っています。
変数を使うことで、同じデータを何度も利用したり、途中で値を変更したりできます。
C#int score = 70;
score = 90;
Console.WriteLine(score); // 90
3-2. 変数の宣言と代入の書き方
C#で変数を使うには、まず宣言します。
C#int number;
これは「int 型の number という変数を用意する」という意味です。
変数に値を入れることを代入といいます。
C#number = 10;
宣言と代入は、同時に書くこともできます。
C#int number = 10;
文字列や真偽値も同じように宣言できます。
C#string name = "高橋";
bool isMember = true;
C#では、変数を使う前に必ず値を入れておく必要があります。
C#int number;
Console.WriteLine(number); // エラー
3-3. 変数名の付け方と命名ルール
変数名は自由に付けられますが、いくつかルールがあります。
変数名には、英字、数字、アンダースコアなどを使えます。ただし、数字から始めることはできません。
C#int score1 = 90; // 正しい
int _score = 80; // 正しい
int 1score = 70; // エラー
また、int や class など、C#で特別な意味を持つ予約語はそのまま変数名にできません。
C#int class = 1; // エラー
変数名は、何のデータを入れているのかわかる名前にすることが大切です。
C#int a = 20; // 意味がわかりにくい
int age = 20; // 意味がわかりやすい
C#では、変数名にキャメルケースを使うことが多いです。
C#string userName = "山田";
int totalPrice = 3000;
3-4. varを使った型推論
var を使うと、変数の型を明示せずに宣言できます。
C#var count = 10;
var message = "こんにちは";
var isSuccess = true;
ただし、var を使う場合でも、C#は右辺から型を判断しています。
C#var count = 10;
count = 20; // 正しい
count = "二十"; // エラー
var は便利ですが、初心者のうちは型を意識するために、最初は int や string などを明示して書くのもおすすめです。
型が明らかな場合や、長い型名を書く場合には var が便利です。
C#var names = new List<string>();
3-5. 定数constとreadonlyの違い
C#では、値を変更できないデータを扱うために const と readonly を使います。
const は、コンパイル時に値が決まっている定数です。
C#const double TaxRate = 0.1;
const で宣言した値は、あとから変更できません。
C#const int MaxCount = 100;
MaxCount = 200; // エラー
readonly も変更できない値を表しますが、コンストラクターで値を設定できる点が特徴です。主にクラスのフィールドで使われます。
C#class User
{
public readonly string Name;
public User(string name)
{
Name = name;
}
}
初心者のうちは、固定の値なら const、オブジェクト生成時に決めたい値なら readonly と考えるとよいでしょう。
3-6. 変数でよくあるエラーと対処法
変数でよくあるエラーの1つは、型が違う値を代入することです。
C#int age = "20"; // エラー
この場合、文字列の "20" を数値に変換する必要があります。
C#int age = int.Parse("20");
もう1つは、変数を宣言しただけで値を入れずに使うことです。
C#int score;
Console.WriteLine(score); // エラー
この場合は、使う前に初期値を入れます。
C#int score = 0;
Console.WriteLine(score);
また、同じスコープ内で同じ名前の変数を宣言することもできません。
C#int count = 1;
int count = 2; // エラー
変数のエラーを減らすには、型、初期値、変数名を意識することが大切です。
4. C#の配列とは
4-1. 配列の基本と使いどころ
配列は、同じ型のデータを複数まとめて扱うための仕組みです。
たとえば、3人分の点数を扱いたい場合、変数を3つ用意することもできます。
C#int score1 = 80;
int score2 = 90;
int score3 = 70;
しかし、人数が増えると管理が大変です。そこで配列を使います。
C#int[] scores = { 80, 90, 70 };
配列を使うと、複数のデータを1つの名前で管理できます。
4-2. 配列の宣言・初期化・代入
C#で配列を宣言するには、型名の後ろに [] を付けます。
C#int[] numbers;
配列を使うには、要素数を指定して作成します。
C#int[] numbers = new int[3];
この例では、int 型のデータを3個入れられる配列を作っています。
配列の要素には、インデックスを使って値を代入します。
C#numbers[0] = 10;
numbers[1] = 20;
numbers[2] = 30;
配列は、宣言と同時に初期化することもできます。
C#int[] numbers = { 10, 20, 30 };
string[] names = { "田中", "佐藤", "鈴木" };
4-3. 配列の要素を取得・変更する方法
配列の要素を取得するときも、インデックスを使います。
C#int[] numbers = { 10, 20, 30 };
Console.WriteLine(numbers[0]); // 10
Console.WriteLine(numbers[1]); // 20
Console.WriteLine(numbers[2]); // 30
C#の配列のインデックスは0から始まります。最初の要素は [0]、2番目の要素は [1] です。
要素を変更する場合も、インデックスを指定します。
C#numbers[1] = 200;
Console.WriteLine(numbers[1]); // 200
4-4. 配列の長さを取得するLength
配列の要素数を取得するには、Length を使います。
C#int[] numbers = { 10, 20, 30 };
Console.WriteLine(numbers.Length); // 3
Length は、配列に入っている要素数を表します。
ループ処理で配列を扱うときにもよく使います。
C#for (int i = 0; i < numbers.Length; i++)
{
Console.WriteLine(numbers[i]);
}
配列の最後のインデックスは、Length - 1 です。要素数が3なら、インデックスは 0、1、2 になります。
4-5. for文・foreach文で配列を処理する方法
配列の中身を順番に処理するには、for 文や foreach 文を使います。
for 文は、インデックスを使って処理したいときに便利です。
C#int[] scores = { 80, 90, 70 };
for (int i = 0; i < scores.Length; i++)
{
Console.WriteLine(scores[i]);
}
foreach 文は、配列の要素を1つずつ取り出すときに便利です。
C#int[] scores = { 80, 90, 70 };
foreach (int score in scores)
{
Console.WriteLine(score);
}
インデックスが必要な場合は for、単純に全要素を処理したい場合は foreach を使うとよいでしょう。
4-6. 多次元配列とジャグ配列の基本
C#には、複数の次元を持つ配列もあります。
多次元配列は、表のようなデータを扱うときに使えます。
C#int[,] matrix = new int[2, 3];
matrix[0, 0] = 1;
matrix[0, 1] = 2;
matrix[0, 2] = 3;
matrix[1, 0] = 4;
matrix[1, 1] = 5;
matrix[1, 2] = 6;
初期化と同時に値を入れることもできます。
C#int[,] matrix =
{
{ 1, 2, 3 },
{ 4, 5, 6 }
};
ジャグ配列は、配列の中に配列を入れる形です。
C#int[][] jagged = new int[2][];
jagged[0] = new int[] { 1, 2 };
jagged[1] = new int[] { 3, 4, 5 };
多次元配列は行と列がそろった表、ジャグ配列は行ごとに長さが違う表のようなものと考えるとわかりやすいです。
4-7. 配列でよくあるエラーと注意点
配列で最もよくあるエラーは、インデックスの範囲外にアクセスすることです。
C#int[] numbers = { 10, 20, 30 };
Console.WriteLine(numbers[3]); // エラー
この配列のインデックスは 0、1、2 までです。numbers[3] は存在しないためエラーになります。
正しくは次のようにします。
C#Console.WriteLine(numbers[2]); // 30
また、配列は作成したあとに要素数を変更できません。
C#int[] numbers = new int[3];
この配列は3個分のデータしか入れられません。あとから4個、5個に増やしたい場合は、List を使うほうが便利です。
5. C#のリストとは
5-1. Listとは何か
C#の List は、複数のデータをまとめて扱うためのコレクションです。
配列と同じように、同じ型のデータを複数管理できますが、配列よりも柔軟に要素を追加・削除できます。
C#List<int> numbers = new List<int>();
List を使うには、通常 System.Collections.Generic 名前空間が必要です。
C#using System.Collections.Generic;
最近のC#環境では自動的に使える場合もありますが、基本として覚えておくとよいでしょう。
5-2. 配列とリストの違い
配列とリストの大きな違いは、要素数をあとから変更できるかどうかです。
配列は、作成時に要素数が決まります。
C#int[] numbers = new int[3];
一方、リストはあとから要素を追加できます。
C#List<int> numbers = new List<int>();
numbers.Add(10);
numbers.Add(20);
numbers.Add(30);
データの数が最初から決まっているなら配列、データの数が増えたり減ったりするならリストが便利です。
5-3. Listの宣言・初期化・要素追加
List を宣言するには、List<型> の形で書きます。
C#List<string> names = new List<string>();
初期値を入れて作ることもできます。
C#List<string> names = new List<string> { "田中", "佐藤", "鈴木" };
要素を追加するには、Add メソッドを使います。
C#names.Add("高橋");
リストの中身を表示すると、追加したデータも含まれます。
C#foreach (string name in names)
{
Console.WriteLine(name);
}
5-4. Add、Remove、Contains、Countの使い方
List では、よく使うメソッドやプロパティがあります。
Add は要素を追加します。
C#List<int> numbers = new List<int>();
numbers.Add(10);
numbers.Add(20);
Remove は指定した要素を削除します。
C#numbers.Remove(10);
Contains は、指定した要素が含まれているかを確認します。
C#bool exists = numbers.Contains(20);
Console.WriteLine(exists); // true
Count は、リストの要素数を取得します。
C#Console.WriteLine(numbers.Count);
配列では要素数を取得するときに Length を使いますが、リストでは Count を使います。
C#int[] array = { 1, 2, 3 };
Console.WriteLine(array.Length);
List<int> list = new List<int> { 1, 2, 3 };
Console.WriteLine(list.Count);
5-5. foreach文でリストを処理する方法
リストも配列と同じように、foreach 文で処理できます。
C#List<string> fruits = new List<string> { "りんご", "みかん", "バナナ" };
foreach (string fruit in fruits)
{
Console.WriteLine(fruit);
}
foreach 文を使うと、リストの要素を先頭から順番に取り出せます。
インデックスを使って処理したい場合は、for 文も使えます。
C#for (int i = 0; i < fruits.Count; i++)
{
Console.WriteLine(fruits[i]);
}
5-6. Listを使うべきケース
List は、データの数が変わる可能性がある場合に向いています。
たとえば、ユーザーが入力した名前を追加していく場合、商品の一覧を管理する場合、検索結果を一時的に保存する場合などです。
C#List<string> users = new List<string>();
users.Add("田中");
users.Add("佐藤");
users.Add("鈴木");
あとから追加や削除を行う処理では、配列よりも List のほうが扱いやすいです。
5-7. リストでよくあるエラーと注意点
リストでも、存在しないインデックスにアクセスするとエラーになります。
C#List<int> numbers = new List<int> { 10, 20, 30 };
Console.WriteLine(numbers[3]); // エラー
リストのインデックスも0から始まるため、この例では 0、1、2 までしか使えません。
また、foreach 文でリストを処理している最中に、そのリストの要素を追加・削除するとエラーになることがあります。
C#foreach (int number in numbers)
{
numbers.Remove(number); // エラーになる可能性がある
}
リストを削除しながら処理したい場合は、別の方法を使う必要があります。初心者のうちは、foreach 中に同じリストを変更しないと覚えておくと安全です。
6. 配列とリストの使い分け
6-1. 要素数が固定なら配列
要素数が最初から決まっていて、あとから増減しない場合は配列が向いています。
たとえば、曜日の一覧や、固定された設定値などです。
C#string[] days = { "月", "火", "水", "木", "金", "土", "日" };
このように、データの数が決まっている場合は、配列を使うとシンプルに書けます。
6-2. 要素数が変わるならリスト
データの数があとから増えたり減ったりする場合は、リストが向いています。
C#List<string> tasks = new List<string>();
tasks.Add("掃除");
tasks.Add("買い物");
tasks.Remove("掃除");
ユーザー入力、検索結果、買い物カゴ、タスク一覧など、要素数が変化するデータには List が便利です。
6-3. 処理速度・メモリ・可読性の違い
配列は構造がシンプルで、要素数が固定されているため、決まったデータを扱う場合に効率的です。
一方、リストは内部的には配列を使いながら、必要に応じてサイズを調整します。そのため、追加や削除が多い処理では書きやすく、実用的です。
ただし、初心者が最初に意識すべきなのは、処理速度よりも可読性です。つまり、コードを読んだときに何をしているのか理解しやすいかが大切です。
要素数が固定なら配列、変わるならリストという基準で選べば、多くの場合は問題ありません。
6-4. 初心者におすすめの判断基準
初心者におすすめの判断基準は、次のように考えることです。
データの数が最初から決まっているなら配列を使います。
C#int[] scores = { 80, 90, 70 };
データの数があとから変わるならリストを使います。
C#List<int> scores = new List<int>();
scores.Add(80);
scores.Add(90);
また、迷った場合は List を選ぶと扱いやすい場面が多いです。特に学習初期や簡単なアプリ開発では、追加や削除がしやすい List のほうが便利です。
6-5. 実務でよく使われる使い分け例
実務では、配列よりも List を使う場面が多くあります。
たとえば、データベースから取得したユーザー一覧、画面に表示する商品リスト、APIから取得したデータなどは、件数が変わることが多いため List がよく使われます。
C#List<string> productNames = new List<string>();
productNames.Add("ノートPC");
productNames.Add("マウス");
productNames.Add("キーボード");
一方、固定の選択肢や変更されないデータには配列も使われます。
C#string[] roles = { "Admin", "User", "Guest" };
実務では、「固定データなら配列」「動的データならリスト」と考えると判断しやすくなります。
7. C#のデータ操作をコード例で理解する
7-1. 変数にデータを入れて表示するサンプル
まずは、変数にデータを入れて表示する基本例です。
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);
このコードでは、文字列、整数、小数、真偽値のデータをそれぞれ変数に入れています。
文字列と変数を組み合わせて表示することもできます。
C#Console.WriteLine($"名前は{name}です。年齢は{age}歳です。");
$"..." を使うと、文字列の中に変数を埋め込めます。
7-2. 配列に複数データを入れて表示するサンプル
次に、配列を使って複数のデータを扱う例です。
C#int[] scores = { 80, 90, 70 };
foreach (int score in scores)
{
Console.WriteLine(score);
}
合計点を計算することもできます。
C#int total = 0;
foreach (int score in scores)
{
total += score;
}
Console.WriteLine($"合計点は{total}点です。");
配列を使うと、複数のデータをまとめて処理できます。
7-3. リストにデータを追加・削除するサンプル
リストを使うと、データをあとから追加・削除できます。
C#List<string> names = new List<string>();
names.Add("田中");
names.Add("佐藤");
names.Add("鈴木");
names.Remove("佐藤");
foreach (string name in names)
{
Console.WriteLine(name);
}
このコードでは、最初に3つの名前を追加し、その後 "佐藤" を削除しています。
リストの要素数を表示することもできます。
C#Console.WriteLine($"人数は{names.Count}人です。");
7-4. 入力されたデータを変数・配列・リストで扱うサンプル
ユーザーから入力されたデータを扱う例を見てみましょう。
C#Console.WriteLine("名前を入力してください:");
string name = Console.ReadLine();
Console.WriteLine($"こんにちは、{name}さん");
Console.ReadLine() は、入力された文字列を取得します。
数値として扱いたい場合は、文字列を数値に変換します。
C#Console.WriteLine("年齢を入力してください:");
string input = Console.ReadLine();
int age = int.Parse(input);
Console.WriteLine($"あなたは{age}歳です。");
複数の入力データをリストに入れることもできます。
C#List<string> names = new List<string>();
for (int i = 0; i < 3; i++)
{
Console.WriteLine("名前を入力してください:");
string name = Console.ReadLine();
names.Add(name);
}
foreach (string n in names)
{
Console.WriteLine(n);
}
このように、入力されたデータを変数やリストに入れることで、あとからまとめて処理できます。
7-5. よく使うデータ操作の実践例
C#でよく使うデータ操作として、平均点を求める例を見てみましょう。
C#List<int> scores = new List<int> { 80, 90, 70, 60 };
int total = 0;
foreach (int score in scores)
{
total += score;
}
double average = (double)total / scores.Count;
Console.WriteLine($"平均点は{average}点です。");
ポイントは、total を double に変換してから割り算していることです。
C#double average = (double)total / scores.Count;
整数同士の割り算では小数部分が切り捨てられることがあります。そのため、正確な平均を出したい場合は型変換を意識する必要があります。
8. C#初心者が覚えておきたいデータ関連の注意点
8-1. 型が違うデータはそのまま代入できない
C#では、型が違うデータをそのまま代入することはできません。
C#int age = "20"; // エラー
"20" は文字列であり、20 は整数です。見た目が似ていても、C#では別のデータ型として扱われます。
正しくは、数値として書くか、文字列を変換します。
C#int age1 = 20;
int age2 = int.Parse("20");
型を意識することは、C#でデータを扱ううえで非常に重要です。
8-2. 型変換とキャストの基本
型変換とは、ある型のデータを別の型に変えることです。
たとえば、文字列を整数に変換するには int.Parse を使います。
C#string text = "100";
int number = int.Parse(text);
数値を文字列に変換するには、ToString を使います。
C#int number = 100;
string text = number.ToString();
明示的に型を変換することをキャストといいます。
C#double value = 10.5;
int number = (int)value;
Console.WriteLine(number); // 10
この場合、小数部分は切り捨てられます。
安全に数値変換したい場合は、TryParse もよく使われます。
C#string input = "123";
if (int.TryParse(input, out int result))
{
Console.WriteLine($"変換成功: {result}");
}
else
{
Console.WriteLine("数値に変換できません");
}
ユーザー入力のように、必ず数値とは限らないデータを扱う場合は TryParse が便利です。
8-3. null参照エラーに注意する
C#でよくあるエラーの1つが、null参照エラーです。
C#string name = null;
Console.WriteLine(name.Length); // エラー
name が null の状態で Length を使おうとしているため、エラーになります。
対策として、使う前に null かどうかを確認します。
C#string name = null;
if (name != null)
{
Console.WriteLine(name.Length);
}
else
{
Console.WriteLine("nameはnullです");
}
また、null条件演算子を使う方法もあります。
C#Console.WriteLine(name?.Length);
?. を使うと、左側が null の場合はエラーにせず、結果を null として扱います。
8-4. インデックス範囲外エラーに注意する
配列やリストでは、存在しないインデックスにアクセスするとエラーになります。
C#int[] numbers = { 10, 20, 30 };
Console.WriteLine(numbers[3]); // エラー
インデックスは0から始まるため、要素数が3の場合、使えるインデックスは 0、1、2 です。
安全に処理するには、Length や Count を使って範囲を確認します。
C#for (int i = 0; i < numbers.Length; i++)
{
Console.WriteLine(numbers[i]);
}
リストの場合は Count を使います。
C#List<int> numbers = new List<int> { 10, 20, 30 };
for (int i = 0; i < numbers.Count; i++)
{
Console.WriteLine(numbers[i]);
}
8-5. データ型を意識するとエラーを減らせる
C#は型を重視する言語です。そのため、データ型を正しく理解していると、エラーを大きく減らせます。
たとえば、数値として計算したいなら int や double、文章として扱いたいなら string、真偽を扱いたいなら bool を使います。
C#int price = 1000;
double taxRate = 0.1;
string productName = "キーボード";
bool isAvailable = true;
どの変数にどんなデータを入れるのかを意識することで、コードの読みやすさも向上します。
9. C#のデータ型・変数・配列・リストに関するよくある質問
9-1. intとstringの違いは何ですか?
int は整数を扱うデータ型です。
C#int age = 20;
string は文字列を扱うデータ型です。
C#string ageText = "20";
20 と "20" は見た目が似ていますが、C#では別のデータです。
int は計算できます。
C#int number = 20;
Console.WriteLine(number + 10); // 30
string は文字として扱われます。
C#string text = "20";
Console.WriteLine(text + "10"); // 2010
計算したいなら int、文字として扱いたいなら string を使いましょう。
9-2. varは使っても問題ありませんか?
var は使っても問題ありません。
ただし、var は型がなくなるわけではなく、C#が自動で型を判断しているだけです。
C#var name = "田中"; // string
var age = 20; // int
初心者のうちは、型を覚えるために int や string を明示して書くのもおすすめです。
一方で、型が明らかな場合は var を使うとコードが読みやすくなることもあります。
C#var users = new List<string>();
大切なのは、var を使っても中身の型を理解していることです。
9-3. 配列とListはどちらを使えばいいですか?
要素数が固定なら配列、要素数が変わるなら List を使うのがおすすめです。
配列は、要素数が決まっているデータに向いています。
C#string[] days = { "月", "火", "水", "木", "金", "土", "日" };
List は、あとから追加や削除をするデータに向いています。
C#List<string> names = new List<string>();
names.Add("田中");
names.Add("佐藤");
初心者が迷った場合は、追加・削除がしやすい List を選ぶと扱いやすいことが多いです。
9-4. stringは値型ですか?参照型ですか?
string は参照型です。
ただし、C#の string は特別な性質を持っており、一度作成した文字列の中身は変更できません。この性質を不変といいます。
C#string text = "Hello";
text = text + " C#";
このコードでは、元の文字列を書き換えているように見えますが、実際には新しい文字列が作られています。
string は参照型ですが、初心者のうちは「文字列を扱うための基本的な型」として覚えておけば問題ありません。
9-5. C#でデータを保存するにはどうすればいいですか?
変数、配列、リストは、プログラムの実行中にデータを保存するために使います。
C#string name = "田中";
List<int> scores = new List<int> { 80, 90, 70 };
ただし、プログラムを終了すると、変数やリストに入っていたデータは基本的に消えます。
プログラム終了後もデータを残したい場合は、ファイルやデータベースに保存します。
たとえば、簡単なテキストデータならファイルに保存できます。
C#File.WriteAllText("data.txt", "こんにちは");
ファイルから読み込むこともできます。
C#string text = File.ReadAllText("data.txt");
Console.WriteLine(text);
本格的なアプリでは、SQL Server、SQLite、JSONファイルなどを使ってデータを保存することもあります。
まとめ
C#でデータを扱うには、データ型、変数、配列、リストの理解が欠かせません。
データ型は、整数、文字列、真偽値など、データの種類を表します。変数は、データを入れておく箱のようなものです。配列は、同じ型の複数データを固定の数でまとめて扱う仕組みです。リストは、複数データを追加・削除しながら柔軟に扱う仕組みです。
初心者のうちは、まず次の基準で考えるとわかりやすいです。
整数は int、文字列は string、真偽値は bool を使います。
1つのデータを扱うなら変数、複数の固定データを扱うなら配列、増減する複数データを扱うなら List を使います。
また、C#は型を重視する言語なので、型が違うデータの代入、null参照、インデックス範囲外エラーには注意が必要です。
C#のデータ操作に慣れると、条件分岐、繰り返し処理、クラス、ファイル保存、データベース処理など、より実践的なプログラミングにも進みやすくなります。まずは変数、配列、リストを使って、さまざまなデータを扱うコードを書いてみましょう。

