C#の要素数を取得する方法|Length・Count・GetLengthの違いを初心者向けに解説

はじめに

C#で配列やListを扱うとき、「要素数を取得したい」という場面はとても多くあります。

たとえば、次のような処理です。

C#
int[] numbers = { 10, 20, 30 };

Console.WriteLine(numbers.Length);

このコードでは、配列numbersに入っている要素数を取得しています。

C#で要素数を取得するときによく使うのが、次の3つです。

C#
Length
Count
GetLength

ただし、これらはどれでも同じように使えるわけではありません。

配列ではLengthList<T>ではCount、多次元配列ではGetLengthを使うのが基本です。

この記事では、C#で要素数を取得する方法について、初心者にもわかりやすく解説します。LengthCountGetLengthの違いや使い分け、よくあるエラー、実践で使えるサンプルコードも紹介します。

1. C#で要素数を取得する基本

1-1. 要素数とは何か

要素数とは、配列やListなどの中に入っているデータの個数のことです。

たとえば、次の配列を見てみましょう。

C#
int[] scores = { 80, 90, 70 };

この配列には、809070の3つの値が入っています。

つまり、この配列の要素数は3です。

Listの場合も同じです。

C#
List<string> names = new List<string> { "田中", "佐藤", "鈴木" };

このListには、3つの文字列が入っています。

そのため、要素数は3です。

C#では、データの種類によって要素数の取得方法が異なります。配列なのか、Listなのか、多次元配列なのかによって、使うプロパティやメソッドを正しく選ぶ必要があります。

1-2. C#でよく使う要素数の取得方法

C#で要素数を取得するときによく使う方法は、主に次の3つです。

C#
Length
Count
GetLength

それぞれの基本的な使い方は次のとおりです。

配列の要素数を取得する場合は、Lengthを使います。

C#
int[] numbers = { 1, 2, 3 };

Console.WriteLine(numbers.Length);

Listの要素数を取得する場合は、Countを使います。

C#
List<int> numbers = new List<int> { 1, 2, 3 };

Console.WriteLine(numbers.Count);

多次元配列の行数や列数を取得する場合は、GetLengthを使います。

C#
int[,] matrix = {
{ 1, 2, 3 },
{ 4, 5, 6 }
};

Console.WriteLine(matrix.GetLength(0));
Console.WriteLine(matrix.GetLength(1));

LengthCountGetLengthは似ていますが、使う対象が違います。

1-3. Length・Count・GetLengthの使い分け早見表

C#で要素数を取得するときは、次のように使い分けるとわかりやすいです。

対象使うもの取得できる値
1次元配列Length配列の要素数
文字列Length文字数
List<T>CountListの要素数
多次元配列GetLength(次元番号)指定した次元の要素数
多次元配列Length全要素数
IEnumerable<T>Count()条件に一致する要素数や列挙結果の件数

基本的には、次のように覚えるとよいです。

C#
配列は Length
List Count
多次元配列の行数・列数は GetLength

この3つを押さえておけば、C#で要素数を取得する基本はかなり理解しやすくなります。

2. 配列の要素数はLengthで取得する

2-1. 1次元配列の要素数を取得する基本構文

C#で配列の要素数を取得するには、Lengthプロパティを使います。

基本構文は次のとおりです。

C#
配列名.Length

たとえば、次のように使います。

C#
int[] numbers = { 10, 20, 30 };

int count = numbers.Length;

この場合、numbersには3つの要素が入っているため、numbers.Lengthの値は3になります。

2-2. Lengthを使ったサンプルコード

実際にLengthを使って、配列の要素数を表示してみましょう。

C#
using System;

class Program
{
static void Main()
{
int[] numbers = { 10, 20, 30, 40, 50 };

Console.WriteLine(numbers.Length);
}
}

実行結果は次のようになります。

C#
5

配列numbersには、1020304050の5つの要素があります。

そのため、numbers.Length5を返します。

文字列配列でも同じように使えます。

C#
string[] fruits = { "Apple", "Banana", "Orange" };

Console.WriteLine(fruits.Length);

実行結果は次のとおりです。

C#
3

配列の型がintでもstringでも、配列であればLengthで要素数を取得できます。

2-3. for文でLengthを使って全要素を処理する方法

Lengthは、for文で配列の全要素を処理するときによく使います。

C#
string[] fruits = { "Apple", "Banana", "Orange" };

for (int i = 0; i < fruits.Length; i++)
{
Console.WriteLine(fruits[i]);
}

実行結果は次のようになります。

C#
Apple
Banana
Orange

ポイントは、条件式にi < fruits.Lengthを指定していることです。

配列のインデックスは0から始まります。

要素数が3の場合、使えるインデックスは次の3つです。

C#
0
1
2

そのため、i <= fruits.Lengthのように書くと、最後に存在しないインデックスへアクセスしてエラーになります。

正しくは、次のように書きます。

C#
for (int i = 0; i < fruits.Length; i++)

配列の全要素を順番に処理したい場合は、Lengthを使って範囲外アクセスを防ぐのが基本です。

2-4. Lengthで取得できる値と注意点

配列のLengthで取得できるのは、配列に確保されている要素数です。

次の例を見てみましょう。

C#
int[] numbers = new int[5];

Console.WriteLine(numbers.Length);

実行結果は次のとおりです。

C#
5

この配列には明示的に値を代入していませんが、要素数は5です。

なぜなら、new int[5]によって5個分の領域が作られているからです。

このとき、各要素にはint型の初期値である0が入っています。

C#
int[] numbers = new int[5];

Console.WriteLine(numbers[0]);
Console.WriteLine(numbers[1]);

実行結果は次のようになります。

C#
0
0

つまり、Lengthは「実際に意味のある値が入っている数」ではなく、「配列として持っている要素の数」を返します。

また、配列は作成後に要素数を変更できません。

C#
int[] numbers = new int[3];

この配列の要素数は3で固定されます。

後から要素を追加したり削除したりしたい場合は、配列ではなくList<T>を使うのが一般的です。

3. Listの要素数はCountで取得する

3-1. List<T>の要素数を取得する基本構文

C#でList<T>の要素数を取得するには、Countプロパティを使います。

基本構文は次のとおりです。

C#
リスト名.Count

たとえば、次のように使います。

C#
List<int> numbers = new List<int> { 10, 20, 30 };

int count = numbers.Count;

この場合、numbersには3つの要素が入っているため、numbers.Countの値は3になります。

List<T>を使うには、通常は次の名前空間を読み込みます。

C#
using System.Collections.Generic;

3-2. Countを使ったサンプルコード

Countを使って、Listの要素数を表示してみましょう。

C#
using System;
using System.Collections.Generic;

class Program
{
static void Main()
{
List<string> names = new List<string>
{
"田中",
"佐藤",
"鈴木"
};

Console.WriteLine(names.Count);
}
}

実行結果は次のとおりです。

C#
3

Listに要素を追加すると、Countの値も変わります。

C#
List<string> names = new List<string>();

Console.WriteLine(names.Count);

names.Add("田中");
names.Add("佐藤");

Console.WriteLine(names.Count);

実行結果は次のようになります。

C#
0
2

最初は空のListなので、Count0です。

その後、Addで2つの要素を追加したため、Count2になります。

3-3. CountとLengthを間違えやすい理由

C#初心者がよく間違えるのが、配列とListの要素数取得方法です。

配列ではLengthを使います。

C#
int[] array = { 1, 2, 3 };

Console.WriteLine(array.Length);

ListではCountを使います。

C#
List<int> list = new List<int> { 1, 2, 3 };

Console.WriteLine(list.Count);

配列とListはどちらも複数の値を扱うため、同じように見えます。

しかし、要素数を取得するプロパティは異なります。

配列に対して次のように書くと、通常はエラーになります。

C#
int[] array = { 1, 2, 3 };

Console.WriteLine(array.Count);

Listに対して次のように書いてもエラーになります。

C#
List<int> list = new List<int> { 1, 2, 3 };

Console.WriteLine(list.Length);

この違いは、C#の基本としてしっかり覚えておきましょう。

3-4. Listが空かどうかをCountで判定する方法

Listが空かどうかを判定するには、Count0かどうかを調べます。

C#
List<string> names = new List<string>();

if (names.Count == 0)
{
Console.WriteLine("Listは空です");
}
else
{
Console.WriteLine("Listには要素があります");
}

実行結果は次のとおりです。

C#
Listは空です

要素が1つでも入っているかを調べたい場合は、次のように書けます。

C#
if (names.Count > 0)
{
Console.WriteLine("要素があります");
}

Listの要素数に応じて処理を分けたい場合、Countは非常によく使います。

たとえば、データが存在する場合だけ処理するコードは次のように書けます。

C#
List<int> scores = new List<int> { 80, 90, 70 };

if (scores.Count > 0)
{
Console.WriteLine("点数データがあります");
}

Countを使えば、Listの中身が空かどうかを簡単に判定できます。

4. 多次元配列の要素数はGetLengthで取得する

4-1. 多次元配列におけるLengthとGetLengthの違い

C#の多次元配列では、LengthGetLengthの違いを理解することが重要です。

たとえば、次の2次元配列を見てみましょう。

C#
int[,] matrix = {
{ 1, 2, 3 },
{ 4, 5, 6 }
};

この配列は、2行3列の形になっています。

C#
1 2 3
4 5 6

この場合、全要素数は6です。

C#
Console.WriteLine(matrix.Length);

実行結果は次のとおりです。

C#
6

一方で、行数や列数を個別に取得したい場合は、GetLengthを使います。

C#
Console.WriteLine(matrix.GetLength(0));
Console.WriteLine(matrix.GetLength(1));

実行結果は次のとおりです。

C#
2
3

GetLength(0)は行数、GetLength(1)は列数を返します。

つまり、多次元配列では次のように使い分けます。

C#
Length        全要素数
GetLength(0) 0番目の次元の要素数
GetLength(1) 1番目の次元の要素数

2次元配列で行数や列数を知りたい場合は、LengthではなくGetLengthを使いましょう。

4-2. GetLengthの基本構文

GetLengthの基本構文は次のとおりです。

C#
配列名.GetLength(次元番号)

次元番号は0から始まります。

2次元配列の場合は、次のように考えます。

C#
GetLength(0)  1つ目の次元
GetLength(1) 2つ目の次元

一般的な2次元配列では、次のように使います。

C#
int rowCount = matrix.GetLength(0);
int columnCount = matrix.GetLength(1);

GetLengthの戻り値はintです。

そのため、行数や列数を変数に代入して、for文などで使えます。

4-3. 2次元配列の行数・列数を取得するサンプルコード

2次元配列の行数と列数を取得するサンプルを見てみましょう。

C#
using System;

class Program
{
static void Main()
{
int[,] matrix = {
{ 1, 2, 3 },
{ 4, 5, 6 }
};

int rows = matrix.GetLength(0);
int columns = matrix.GetLength(1);

Console.WriteLine("行数: " + rows);
Console.WriteLine("列数: " + columns);
}
}

実行結果は次のとおりです。

C#
行数: 2
列数: 3

2次元配列の全要素を処理する場合は、行数と列数を使って二重のfor文を書きます。

C#
int[,] matrix = {
{ 1, 2, 3 },
{ 4, 5, 6 }
};

for (int i = 0; i < matrix.GetLength(0); i++)
{
for (int j = 0; j < matrix.GetLength(1); j++)
{
Console.WriteLine(matrix[i, j]);
}
}

このように、2次元配列ではGetLength(0)GetLength(1)を使うことで、範囲外アクセスを防ぎながら全要素を処理できます。

4-4. GetLengthの引数に指定する次元番号の考え方

GetLengthの引数には、取得したい次元の番号を指定します。

次元番号は0から始まります。

2次元配列の場合は、次のように考えるとわかりやすいです。

C#
int[,] matrix = {
{ 1, 2, 3 },
{ 4, 5, 6 }
};

この配列は、2行3列です。

C#
matrix.GetLength(0)  2
matrix.GetLength(1) 3

GetLength(0)は、左側のインデックスに対応します。

C#
matrix[, ]

つまり、matrix[i, j]でいうiの範囲を知りたい場合は、GetLength(0)を使います。

jの範囲を知りたい場合は、GetLength(1)を使います。

C#
for (int i = 0; i < matrix.GetLength(0); i++)
{
for (int j = 0; j < matrix.GetLength(1); j++)
{
Console.WriteLine(matrix[i, j]);
}
}

3次元配列の場合は、次のように指定します。

C#
int[,,] array = new int[2, 3, 4];

Console.WriteLine(array.GetLength(0));
Console.WriteLine(array.GetLength(1));
Console.WriteLine(array.GetLength(2));

実行結果は次のとおりです。

C#
2
3
4

GetLengthの引数に指定できる番号は、次元数に応じて決まります。

2次元配列でGetLength(2)を指定すると、存在しない次元を指定しているため例外が発生します。

5. Length・Count・GetLengthの違いを具体例で比較

5-1. 配列ではLengthを使う

配列の要素数を取得する場合は、Lengthを使います。

C#
int[] numbers = { 1, 2, 3, 4 };

Console.WriteLine(numbers.Length);

実行結果は次のとおりです。

C#
4

配列は作成時に要素数が決まります。

C#
int[] numbers = new int[4];

この場合、numbers.Length4です。

配列では、Lengthを使うのが基本です。

5-2. ListではCountを使う

List<T>の要素数を取得する場合は、Countを使います。

C#
List<int> numbers = new List<int> { 1, 2, 3, 4 };

Console.WriteLine(numbers.Count);

実行結果は次のとおりです。

C#
4

Listは、要素を追加したり削除したりできます。

C#
List<int> numbers = new List<int>();

numbers.Add(10);
numbers.Add(20);

Console.WriteLine(numbers.Count);

numbers.Remove(10);

Console.WriteLine(numbers.Count);

実行結果は次のようになります。

C#
2
1

Countは、現在Listに入っている要素数を返します。

配列のように固定長ではなく、要素の追加や削除に応じて値が変わります。

5-3. 多次元配列ではGetLengthを使う

多次元配列で、行数や列数を取得したい場合はGetLengthを使います。

C#
int[,] matrix = {
{ 1, 2, 3 },
{ 4, 5, 6 }
};

Console.WriteLine(matrix.GetLength(0));
Console.WriteLine(matrix.GetLength(1));

実行結果は次のとおりです。

C#
2
3

一方で、Lengthを使うと全要素数が取得されます。

C#
Console.WriteLine(matrix.Length);

実行結果は次のとおりです。

C#
6

2次元配列で行数・列数を取得したい場合は、LengthではなくGetLengthを使いましょう。

5-4. CountプロパティとLINQのCountメソッドの違い

C#には、CountプロパティとCount()メソッドがあります。

この2つは名前が似ていますが、使い方が違います。

List<T>の要素数を取得する場合は、Countプロパティを使います。

C#
List<int> numbers = new List<int> { 1, 2, 3 };

Console.WriteLine(numbers.Count);

一方、LINQのCount()メソッドを使うと、条件に一致する要素数を数えることができます。

C#
using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
static void Main()
{
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };

int evenCount = numbers.Count(n => n % 2 == 0);

Console.WriteLine(evenCount);
}
}

実行結果は次のとおりです。

C#
2

この例では、偶数である24の2つが数えられています。

また、LINQのCount()は、配列に対しても使えます。

C#
using System;
using System.Linq;

class Program
{
static void Main()
{
int[] numbers = { 1, 2, 3 };

Console.WriteLine(numbers.Count());
}
}

ただし、配列の全要素数を取得するだけなら、通常はLengthを使う方が自然です。

C#
Console.WriteLine(numbers.Length);

Listの全要素数を取得するだけなら、Countプロパティを使うのが基本です。

C#
Console.WriteLine(numbers.Count);

まとめると、次のように使い分けます。

C#
Listの全要素数        Countプロパティ
条件に一致する数 LINQのCount()
配列の全要素数 Length

5-5. どれを使えばよいか迷ったときの判断基準

LengthCountGetLengthのどれを使えばよいか迷ったときは、対象の型を見て判断します。

配列であればLengthです。

C#
int[] array = { 1, 2, 3 };

Console.WriteLine(array.Length);

ListであればCountです。

C#
List<int> list = new List<int> { 1, 2, 3 };

Console.WriteLine(list.Count);

2次元配列などで、行数や列数を取得したい場合はGetLengthです。

C#
int[,] matrix = new int[2, 3];

Console.WriteLine(matrix.GetLength(0));
Console.WriteLine(matrix.GetLength(1));

条件に一致する要素数を数えたい場合は、LINQのCount()を使います。

C#
int[] numbers = { 1, 2, 3, 4, 5 };

int count = numbers.Count(n => n >= 3);

迷ったときは、次のように考えましょう。

C#
配列か?              Length
Listか? Count
多次元配列の各次元か? GetLength
条件付きで数えるか? Count()

この判断基準を覚えておくと、C#で要素数を取得するときに迷いにくくなります。

6. 要素数を取得するときによくあるエラーと対処法

6-1. 配列でCountを使おうとしてエラーになるケース

配列の要素数を取得しようとして、次のように書いてしまうことがあります。

C#
int[] numbers = { 1, 2, 3 };

Console.WriteLine(numbers.Count);

このコードはエラーになります。

配列にはCountプロパティがないためです。

正しくは、Lengthを使います。

C#
int[] numbers = { 1, 2, 3 };

Console.WriteLine(numbers.Length);

実行結果は次のとおりです。

C#
3

なお、LINQを使えばCount()メソッドを呼び出すことはできます。

C#
using System.Linq;

int[] numbers = { 1, 2, 3 };

Console.WriteLine(numbers.Count());

ただし、単純に配列の要素数を取得するだけなら、Lengthを使うのが基本です。

6-2. ListでLengthを使おうとしてエラーになるケース

Listの要素数を取得しようとして、次のように書くのもよくある間違いです。

C#
List<int> numbers = new List<int> { 1, 2, 3 };

Console.WriteLine(numbers.Length);

このコードはエラーになります。

List<T>にはLengthプロパティがありません。

正しくは、Countを使います。

C#
List<int> numbers = new List<int> { 1, 2, 3 };

Console.WriteLine(numbers.Count);

実行結果は次のとおりです。

C#
3

Lengthは配列や文字列で使うもの、CountはListで使うもの、と覚えておくと間違いにくくなります。

6-3. nullの変数で要素数を取得して例外が発生するケース

変数がnullの状態でLengthCountを呼び出すと、例外が発生します。

C#
int[] numbers = null;

Console.WriteLine(numbers.Length);

このコードを実行すると、NullReferenceExceptionが発生します。

numbersが配列を参照していない状態で、Lengthにアクセスしようとしているためです。

Listでも同じです。

C#
List<int> numbers = null;

Console.WriteLine(numbers.Count);

この場合も、NullReferenceExceptionが発生します。

対処法としては、事前にnullチェックを行います。

C#
int[] numbers = null;

if (numbers != null)
{
Console.WriteLine(numbers.Length);
}
else
{
Console.WriteLine("配列はnullです");
}

また、null条件演算子を使う方法もあります。

C#
int[] numbers = null;

int count = numbers?.Length ?? 0;

Console.WriteLine(count);

実行結果は次のとおりです。

C#
0

numbers?.Lengthは、numbersnullでなければLengthを取得します。

numbersnullの場合はnullになります。

その後、?? 0によって、nullの場合は0を代入しています。

Listでも同じように書けます。

C#
List<int> numbers = null;

int count = numbers?.Count ?? 0;

Console.WriteLine(count);

nullの可能性がある場合は、要素数を取得する前に必ず対策しましょう。

6-4. GetLengthの次元番号を間違えるケース

多次元配列でGetLengthの引数を間違えると、例外が発生します。

C#
int[,] matrix = new int[2, 3];

Console.WriteLine(matrix.GetLength(2));

この配列は2次元配列です。

使える次元番号は01だけです。

そのため、GetLength(2)を指定するとエラーになります。

正しくは、次のように書きます。

C#
int[,] matrix = new int[2, 3];

Console.WriteLine(matrix.GetLength(0));
Console.WriteLine(matrix.GetLength(1));

実行結果は次のとおりです。

C#
2
3

2次元配列では、GetLength(0)が1つ目の次元、GetLength(1)が2つ目の次元です。

次元番号は1からではなく0から始まることに注意しましょう。

6-5. 範囲外アクセスを防ぐための要素数チェック

配列やListでは、存在しないインデックスにアクセスするとエラーになります。

たとえば、次のコードはエラーになります。

C#
int[] numbers = { 10, 20, 30 };

Console.WriteLine(numbers[3]);

この配列の要素数は3です。

使えるインデックスは012です。

numbers[3]は存在しないため、範囲外アクセスになります。

安全にアクセスするには、Lengthを使ってチェックします。

C#
int[] numbers = { 10, 20, 30 };

int index = 2;

if (index >= 0 && index < numbers.Length)
{
Console.WriteLine(numbers[index]);
}
else
{
Console.WriteLine("範囲外です");
}

Listの場合は、Countを使います。

C#
List<string> names = new List<string> { "田中", "佐藤", "鈴木" };

int index = 1;

if (index >= 0 && index < names.Count)
{
Console.WriteLine(names[index]);
}
else
{
Console.WriteLine("範囲外です");
}

要素数を使って範囲を確認することで、IndexOutOfRangeExceptionArgumentOutOfRangeExceptionを防ぐことができます。

7. 実践で使える要素数取得のサンプル集

7-1. 配列の要素数を表示する

配列の要素数を表示する基本サンプルです。

C#
using System;

class Program
{
static void Main()
{
int[] numbers = { 10, 20, 30, 40 };

Console.WriteLine("配列の要素数: " + numbers.Length);
}
}

実行結果は次のとおりです。

C#
配列の要素数: 4

配列では、Lengthを使って要素数を取得します。

7-2. Listの要素数を表示する

Listの要素数を表示するサンプルです。

C#
using System;
using System.Collections.Generic;

class Program
{
static void Main()
{
List<string> names = new List<string>
{
"田中",
"佐藤",
"鈴木"
};

Console.WriteLine("Listの要素数: " + names.Count);
}
}

実行結果は次のとおりです。

C#
Listの要素数: 3

Listでは、Countを使って要素数を取得します。

7-3. 2次元配列の行数と列数を表示する

2次元配列の行数と列数を表示するサンプルです。

C#
using System;

class Program
{
static void Main()
{
int[,] matrix = {
{ 1, 2, 3 },
{ 4, 5, 6 }
};

int rows = matrix.GetLength(0);
int columns = matrix.GetLength(1);

Console.WriteLine("行数: " + rows);
Console.WriteLine("列数: " + columns);
Console.WriteLine("全要素数: " + matrix.Length);
}
}

実行結果は次のとおりです。

C#
行数: 2
列数: 3
全要素数: 6

2次元配列では、行数や列数を取得する場合にGetLengthを使います。

全要素数を取得したい場合は、Lengthを使います。

7-4. 要素数が0かどうかを判定する

配列やListが空かどうかを判定するサンプルです。

配列の場合は、Length0かどうかを確認します。

C#
int[] numbers = new int[0];

if (numbers.Length == 0)
{
Console.WriteLine("配列は空です");
}
else
{
Console.WriteLine("配列には要素があります");
}

実行結果は次のとおりです。

C#
配列は空です

Listの場合は、Count0かどうかを確認します。

C#
List<string> names = new List<string>();

if (names.Count == 0)
{
Console.WriteLine("Listは空です");
}
else
{
Console.WriteLine("Listには要素があります");
}

実行結果は次のとおりです。

C#
Listは空です

「空でない場合だけ処理したい」というときは、次のように書きます。

C#
if (names.Count > 0)
{
Console.WriteLine("要素があります");
}

7-5. 条件に一致する要素数をLINQのCountで数える

条件に一致する要素数を数えたい場合は、LINQのCount()メソッドを使います。

C#
using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
static void Main()
{
List<int> scores = new List<int> { 80, 55, 90, 40, 70 };

int passCount = scores.Count(score => score >= 60);

Console.WriteLine("合格者数: " + passCount);
}
}

実行結果は次のとおりです。

C#
合格者数: 3

この例では、60以上の値が条件に一致します。

対象となる値は、809070の3つです。

そのため、結果は3になります。

配列でも同じようにLINQのCount()を使えます。

C#
using System;
using System.Linq;

class Program
{
static void Main()
{
int[] numbers = { 1, 2, 3, 4, 5, 6 };

int evenCount = numbers.Count(n => n % 2 == 0);

Console.WriteLine("偶数の数: " + evenCount);
}
}

実行結果は次のとおりです。

C#
偶数の数: 3

条件に一致する要素数を数えたい場合は、LengthCountプロパティではなく、LINQのCount()を使うと便利です。

8. C#の要素数取得に関するよくある質問

8-1. LengthとCountは同じ意味ですか?

LengthCountは、どちらも要素数を表す場面で使われますが、使う対象が違います。

配列ではLengthを使います。

C#
int[] numbers = { 1, 2, 3 };

Console.WriteLine(numbers.Length);

ListではCountを使います。

C#
List<int> numbers = new List<int> { 1, 2, 3 };

Console.WriteLine(numbers.Count);

どちらも「要素数」を取得するという意味では似ています。

しかし、C#では型によって使えるプロパティが異なるため、正しく使い分ける必要があります。

8-2. 配列の要素数を変更できますか?

配列の要素数は、作成後に変更できません。

C#
int[] numbers = new int[3];

この配列は、要素数3で固定されます。

後から4個目、5個目を追加するような使い方はできません。

要素数を変更したい場合は、新しい配列を作り直す必要があります。

C#
int[] oldArray = { 1, 2, 3 };
int[] newArray = new int[5];

Array.Copy(oldArray, newArray, oldArray.Length);

ただし、要素を追加・削除したい場合は、配列よりもList<T>を使う方が簡単です。

C#
List<int> numbers = new List<int>();

numbers.Add(1);
numbers.Add(2);
numbers.Add(3);

Console.WriteLine(numbers.Count);

要素数が変わる可能性があるデータには、List<T>を使うのが一般的です。

8-3. 文字列の文字数はLengthで取得できますか?

文字列の文字数は、Lengthで取得できます。

C#
string text = "Hello";

Console.WriteLine(text.Length);

実行結果は次のとおりです。

C#
5

日本語の文字列でも使えます。

C#
string text = "こんにちは";

Console.WriteLine(text.Length);

実行結果は次のとおりです。

C#
5

ただし、string.Lengthは厳密には文字列に含まれるcharの数を返します。

絵文字や一部の特殊な文字では、見た目の文字数とLengthの値が一致しないことがあります。

通常の英数字や日本語を扱う範囲では、文字数の取得にLengthを使うと覚えておけば問題ありません。

8-4. Count()とCountプロパティはどちらを使うべきですか?

Listの全要素数を取得するだけなら、Countプロパティを使うのが基本です。

C#
List<int> numbers = new List<int> { 1, 2, 3 };

Console.WriteLine(numbers.Count);

LINQのCount()メソッドは、条件に一致する要素数を数えたいときに便利です。

C#
int count = numbers.Count(n => n >= 2);

また、IEnumerable<T>のようにCountプロパティを持たないデータに対して件数を数えるときにも、Count()を使うことがあります。

ただし、単純にListの要素数を取得するだけなら、Count()ではなくCountプロパティを使う方がわかりやすく、効率的です。

C#
// 基本はこちら
numbers.Count

// 条件付きで数えるならこちら
numbers.Count(n => n >= 2)

8-5. 2次元配列の全要素数を取得するにはどうすればよいですか?

2次元配列の全要素数を取得するには、Lengthを使います。

C#
int[,] matrix = {
{ 1, 2, 3 },
{ 4, 5, 6 }
};

Console.WriteLine(matrix.Length);

実行結果は次のとおりです。

C#
6

この配列は2行3列なので、全要素数は2 × 3 = 6です。

行数と列数を個別に取得したい場合は、GetLengthを使います。

C#
int rows = matrix.GetLength(0);
int columns = matrix.GetLength(1);

Console.WriteLine(rows);
Console.WriteLine(columns);

実行結果は次のとおりです。

C#
2
3

全要素数が欲しいならLength、行数や列数が欲しいならGetLengthを使います。

まとめ

C#で要素数を取得する方法は、対象によって使い分ける必要があります。

配列の要素数を取得する場合は、Lengthを使います。

C#
int[] numbers = { 1, 2, 3 };

Console.WriteLine(numbers.Length);

Listの要素数を取得する場合は、Countを使います。

C#
List<int> numbers = new List<int> { 1, 2, 3 };

Console.WriteLine(numbers.Count);

多次元配列の行数や列数を取得する場合は、GetLengthを使います。

C#
int[,] matrix = new int[2, 3];

Console.WriteLine(matrix.GetLength(0));
Console.WriteLine(matrix.GetLength(1));

2次元配列の全要素数を取得したい場合は、Lengthを使います。

C#
Console.WriteLine(matrix.Length);

条件に一致する要素数を数えたい場合は、LINQのCount()が便利です。

C#
int count = numbers.Count(n => n > 10);

C#の要素数取得で迷ったら、次のように考えましょう。

C#
配列                Length
List Count
多次元配列の各次元 GetLength
条件付きで数える Count()

LengthCountGetLengthの違いを理解しておけば、配列やList、多次元配列を扱うコードを正しく書けるようになります。