C#の要素数を取得する方法|Length・Count・GetLengthの違いを初心者向けに解説
はじめに
C#で配列やListを扱うとき、「要素数を取得したい」という場面はとても多くあります。
たとえば、次のような処理です。
C#int[] numbers = { 10, 20, 30 };
Console.WriteLine(numbers.Length);
このコードでは、配列numbersに入っている要素数を取得しています。
C#で要素数を取得するときによく使うのが、次の3つです。
C#Length
Count
GetLength
ただし、これらはどれでも同じように使えるわけではありません。
配列ではLength、List<T>ではCount、多次元配列ではGetLengthを使うのが基本です。
この記事では、C#で要素数を取得する方法について、初心者にもわかりやすく解説します。Length、Count、GetLengthの違いや使い分け、よくあるエラー、実践で使えるサンプルコードも紹介します。
1. C#で要素数を取得する基本
1-1. 要素数とは何か
要素数とは、配列やListなどの中に入っているデータの個数のことです。
たとえば、次の配列を見てみましょう。
C#int[] scores = { 80, 90, 70 };
この配列には、80、90、70の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));
Length、Count、GetLengthは似ていますが、使う対象が違います。
1-3. Length・Count・GetLengthの使い分け早見表
C#で要素数を取得するときは、次のように使い分けるとわかりやすいです。
| 対象 | 使うもの | 取得できる値 |
|---|---|---|
| 1次元配列 | Length | 配列の要素数 |
| 文字列 | Length | 文字数 |
List<T> | Count | Listの要素数 |
| 多次元配列 | 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には、10、20、30、40、50の5つの要素があります。
そのため、numbers.Lengthは5を返します。
文字列配列でも同じように使えます。
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なので、Countは0です。
その後、Addで2つの要素を追加したため、Countは2になります。
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が空かどうかを判定するには、Countが0かどうかを調べます。
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#の多次元配列では、LengthとGetLengthの違いを理解することが重要です。
たとえば、次の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.Lengthは4です。
配列では、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
この例では、偶数である2と4の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. どれを使えばよいか迷ったときの判断基準
Length、Count、GetLengthのどれを使えばよいか迷ったときは、対象の型を見て判断します。
配列であれば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の状態でLengthやCountを呼び出すと、例外が発生します。
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は、numbersがnullでなければLengthを取得します。
numbersがnullの場合は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次元配列です。
使える次元番号は0と1だけです。
そのため、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です。
使えるインデックスは0、1、2です。
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("範囲外です");
}
要素数を使って範囲を確認することで、IndexOutOfRangeExceptionやArgumentOutOfRangeExceptionを防ぐことができます。
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が空かどうかを判定するサンプルです。
配列の場合は、Lengthが0かどうかを確認します。
C#int[] numbers = new int[0];
if (numbers.Length == 0)
{
Console.WriteLine("配列は空です");
}
else
{
Console.WriteLine("配列には要素があります");
}
実行結果は次のとおりです。
C#配列は空です
Listの場合は、Countが0かどうかを確認します。
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以上の値が条件に一致します。
対象となる値は、80、90、70の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
条件に一致する要素数を数えたい場合は、LengthやCountプロパティではなく、LINQのCount()を使うと便利です。
8. C#の要素数取得に関するよくある質問
8-1. LengthとCountは同じ意味ですか?
LengthとCountは、どちらも要素数を表す場面で使われますが、使う対象が違います。
配列では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()
Length、Count、GetLengthの違いを理解しておけば、配列やList、多次元配列を扱うコードを正しく書けるようになります。

