C#のLengthとは?文字列・配列での使い方とCountとの違いを初心者向けに解説
はじめに
C#で文字列や配列を扱うときによく使うのが、Lengthです。
Lengthは、文字列の文字数や配列の要素数を取得するためのプロパティです。たとえば、文字列が何文字あるかを調べたり、配列にいくつのデータが入っているかを確認したりするときに使います。
C#を学び始めたばかりの方は、LengthとCountの違いや、Length()のように書いてしまうエラーでつまずくことがあります。
この記事では、C#のLengthについて、文字列・配列での使い方、Countとの違い、よくあるエラーまで初心者向けにわかりやすく解説します。
1. C#のLengthとは?文字列や配列の「長さ」を取得するプロパティ
C#のLengthは、対象の「長さ」を取得するために使います。
主に、次のような場面で使用します。
C#string text = "Hello";
Console.WriteLine(text.Length); // 5
int[] numbers = { 10, 20, 30 };
Console.WriteLine(numbers.Length); // 3
文字列に対して使うと文字数、配列に対して使うと要素数を取得できます。
1-1. Lengthで取得できる値は「文字数」または「要素数」
Lengthで取得できる値は、使う対象によって意味が変わります。
文字列の場合は、文字列に含まれる文字の数を返します。
C#string name = "Taro";
Console.WriteLine(name.Length); // 4
配列の場合は、配列に格納できる要素の数を返します。
C#int[] scores = { 80, 90, 100 };
Console.WriteLine(scores.Length); // 3
つまり、Lengthは「どれくらいの長さがあるか」を数値で返すプロパティです。
1-2. Lengthはメソッドではなくプロパティ
初心者がよく間違えるポイントとして、Lengthはメソッドではなくプロパティである点があります。
そのため、次のように書きます。
C#text.Length
次のように、後ろに丸括弧を付けるとエラーになります。
C#text.Length(); // エラー
C#では、メソッドは()を付けて呼び出しますが、プロパティは値のように参照します。
Lengthはプロパティなので、Length()ではなくLengthと書きましょう。
1-3. C#でLengthが使える代表的な型
C#でLengthがよく使われる代表的な型は、次のとおりです。
| 型 | 例 | Lengthで取得できるもの |
|---|---|---|
string | "Hello" | 文字数 |
| 配列 | int[]、string[] | 要素数 |
| 多次元配列 | int[,] | 全要素数 |
| ジャグ配列 | int[][] | 外側または内側の配列の要素数 |
一方で、List<T>やDictionary<TKey, TValue>では、通常LengthではなくCountを使います。
C#List<int> list = new List<int> { 1, 2, 3 };
Console.WriteLine(list.Count); // OK
Console.WriteLine(list.Length); // エラー
1-4. 初心者がLengthを使う場面
初心者がLengthを使う場面としては、次のような例があります。
文字列が空かどうかを確認する。
C#string input = "abc";
if (input.Length > 0)
{
Console.WriteLine("文字が入力されています");
}
配列の要素数を確認する。
C#int[] numbers = { 1, 2, 3, 4 };
Console.WriteLine(numbers.Length); // 4
for文で配列を順番に処理する。
C#int[] numbers = { 10, 20, 30 };
for (int i = 0; i < numbers.Length; i++)
{
Console.WriteLine(numbers[i]);
}
このように、LengthはC#の基本的な処理で頻繁に使われます。
2. 文字列(string)でLengthを使う方法
文字列でLengthを使うと、その文字列に含まれる文字数を取得できます。
2-1. string.Lengthで文字数を取得する基本構文
文字列の長さを取得する基本構文は次のとおりです。
C#文字列.Length
具体例を見てみましょう。
C#string message = "Hello";
int length = message.Length;
Console.WriteLine(length); // 5
messageには"Hello"という5文字の文字列が入っているため、message.Lengthは5になります。
直接出力することもできます。
C#Console.WriteLine("CSharp".Length); // 6
2-2. 文字列の長さを判定するサンプルコード
Lengthは、文字列の長さを判定するときによく使います。
たとえば、入力された文字列が5文字以上かどうかを確認する場合は、次のように書けます。
C#string password = "abc123";
if (password.Length >= 5)
{
Console.WriteLine("5文字以上です");
}
else
{
Console.WriteLine("5文字未満です");
}
実行結果は次のようになります。
5文字以上です
パスワードの文字数チェックや、ユーザー名の入力制限などでよく使われる書き方です。
2-3. 空文字の場合はLengthが0になる
空文字とは、文字が1つも入っていない文字列のことです。
C#string text = "";
Console.WriteLine(text.Length); // 0
空文字のLengthは0になります。
そのため、文字列が空かどうかを判定するには、次のように書けます。
C#string text = "";
if (text.Length == 0)
{
Console.WriteLine("空文字です");
}
ただし、実務ではstring.IsNullOrEmptyを使うことも多いです。
C#string text = "";
if (string.IsNullOrEmpty(text))
{
Console.WriteLine("nullまたは空文字です");
}
Length == 0は空文字の判定には使えますが、nullには対応できない点に注意しましょう。
2-4. 日本語・全角文字でもLengthで数えられる
Lengthは英数字だけでなく、日本語や全角文字にも使えます。
C#string text = "こんにちは";
Console.WriteLine(text.Length); // 5
日本語の"こんにちは"は5文字なので、Lengthは5になります。
全角英数字でも同じです。
C#string text = "ABC";
Console.WriteLine(text.Length); // 3
全角だから2文字分として数えられるわけではありません。基本的には、C#の文字列内の文字単位で数えられます。
2-5. 絵文字やサロゲートペアを扱うときの注意点
文字列のLengthを使うときに注意したいのが、絵文字などの扱いです。
C#のstring.Lengthは、見た目上の文字数ではなく、内部的なcharの数を返します。
たとえば、次のコードを見てください。
C#string emoji = "😀";
Console.WriteLine(emoji.Length); // 2
画面上では絵文字が1文字に見えますが、Lengthは2になることがあります。
これは、絵文字の一部がサロゲートペアという仕組みで表現され、C#内部では2つのcharとして扱われるためです。
そのため、ユーザーが見た「文字数」を正確に数えたい場合は、単純にLengthだけでは不十分なケースがあります。
通常の英数字や日本語の多くでは問題になりにくいですが、絵文字を含む入力欄やSNS向けの文字数カウントでは注意が必要です。
2-6. 文字数とバイト数は違う
Lengthで取得できるのは文字数であり、バイト数ではありません。
たとえば、次のような文字列があるとします。
C#string text = "abc";
Console.WriteLine(text.Length); // 3
これは3文字なのでLengthは3です。
一方、文字列をUTF-8などの文字コードでバイト列に変換すると、バイト数は文字によって変わります。
C#using System.Text;
string text = "こんにちは";
Console.WriteLine(text.Length); // 5
int byteCount = Encoding.UTF8.GetByteCount(text);
Console.WriteLine(byteCount); // 15
"こんにちは"は5文字ですが、UTF-8では1文字あたり複数バイトになるため、バイト数は15になります。
文字数を知りたいときはLength、バイト数を知りたいときはEncoding.UTF8.GetByteCountなどを使いましょう。
3. 配列でLengthを使う方法
配列でLengthを使うと、配列の要素数を取得できます。
3-1. 配列.Lengthで要素数を取得する基本構文
配列の要素数を取得する基本構文は次のとおりです。
C#配列.Length
具体例を見てみましょう。
C#int[] numbers = { 10, 20, 30 };
Console.WriteLine(numbers.Length); // 3
この配列には10、20、30の3つの要素があるため、Lengthは3になります。
3-2. int配列・string配列でLengthを使うサンプル
Lengthは、数値の配列だけでなく文字列の配列にも使えます。
int配列の例です。
C#int[] scores = { 80, 90, 100 };
Console.WriteLine(scores.Length); // 3
string配列の例です。
C#string[] names = { "田中", "佐藤", "鈴木" };
Console.WriteLine(names.Length); // 3
配列に入っているデータの型がintでもstringでも、配列であればLengthで要素数を取得できます。
3-3. for文で配列のLengthを使ってループする方法
配列のLengthは、for文と組み合わせてよく使います。
C#string[] fruits = { "Apple", "Banana", "Orange" };
for (int i = 0; i < fruits.Length; i++)
{
Console.WriteLine(fruits[i]);
}
実行結果は次のようになります。
Apple
Banana
Orange
i < fruits.Lengthと書くことで、配列の要素数に合わせてループできます。
配列の要素数が変わっても、Lengthを使っていれば自動的に正しい回数だけ繰り返せます。
3-4. 配列のインデックスは0から始まる点に注意
C#の配列のインデックスは0から始まります。
C#string[] colors = { "Red", "Green", "Blue" };
Console.WriteLine(colors[0]); // Red
Console.WriteLine(colors[1]); // Green
Console.WriteLine(colors[2]); // Blue
この配列のLengthは3ですが、最後のインデックスは2です。
つまり、配列の最後の要素は次のように取得します。
C#Console.WriteLine(colors[colors.Length - 1]); // Blue
Lengthが3だからといって、colors[3]にアクセスするとエラーになります。
C#Console.WriteLine(colors[3]); // エラー
配列の最後のインデックスは、常にLength - 1です。
3-5. Lengthで配列のサイズは変更できない
Lengthは配列の要素数を取得するためのプロパティです。
配列のサイズを変更するためのものではありません。
C#int[] numbers = { 1, 2, 3 };
Console.WriteLine(numbers.Length); // 3
次のようにLengthへ値を代入することはできません。
C#numbers.Length = 5; // エラー
C#の配列は、作成した時点でサイズが固定されます。
要素数を柔軟に増減したい場合は、配列ではなくList<T>を使うのが一般的です。
C#List<int> numbers = new List<int>();
numbers.Add(1);
numbers.Add(2);
numbers.Add(3);
Console.WriteLine(numbers.Count); // 3
4. 多次元配列・ジャグ配列でLengthを使う場合
C#には、通常の一次元配列だけでなく、多次元配列やジャグ配列もあります。
これらでLengthを使う場合は、返ってくる値に注意が必要です。
4-1. 多次元配列のLengthは全要素数を返す
多次元配列でLengthを使うと、すべての次元を合わせた全要素数が返されます。
C#int[,] matrix = new int[2, 3];
Console.WriteLine(matrix.Length); // 6
この配列は、2行3列の多次元配列です。
要素数は次のように計算されます。
2 × 3 = 6
そのため、matrix.Lengthは6になります。
4-2. 各次元の要素数はGetLengthを使う
多次元配列で、行数や列数を個別に取得したい場合はGetLengthを使います。
C#int[,] matrix = new int[2, 3];
Console.WriteLine(matrix.GetLength(0)); // 2
Console.WriteLine(matrix.GetLength(1)); // 3
GetLength(0)は1つ目の次元の長さ、GetLength(1)は2つ目の次元の長さを返します。
2次元配列では、一般的に次のように使います。
C#int[,] matrix =
{
{ 1, 2, 3 },
{ 4, 5, 6 }
};
for (int row = 0; row < matrix.GetLength(0); row++)
{
for (int col = 0; col < matrix.GetLength(1); col++)
{
Console.WriteLine(matrix[row, col]);
}
}
多次元配列では、全要素数が知りたいならLength、各次元の長さが知りたいならGetLengthを使いましょう。
4-3. ジャグ配列では各配列ごとにLengthを使う
ジャグ配列とは、配列の中に配列が入っている構造のことです。
C#int[][] jagged =
{
new int[] { 1, 2 },
new int[] { 3, 4, 5 },
new int[] { 6 }
};
外側の配列の要素数は、次のように取得します。
C#Console.WriteLine(jagged.Length); // 3
内側の配列の要素数は、それぞれの配列に対してLengthを使います。
C#Console.WriteLine(jagged[0].Length); // 2
Console.WriteLine(jagged[1].Length); // 3
Console.WriteLine(jagged[2].Length); // 1
ジャグ配列では、内側の配列ごとに長さが異なる場合があります。
4-4. 多次元配列とジャグ配列のLengthの違い
多次元配列とジャグ配列では、Lengthの意味が少し異なります。
多次元配列の場合、Lengthは全要素数を返します。
C#int[,] matrix = new int[2, 3];
Console.WriteLine(matrix.Length); // 6
ジャグ配列の場合、外側の配列にLengthを使うと、外側の要素数を返します。
C#int[][] jagged =
{
new int[] { 1, 2 },
new int[] { 3, 4, 5 }
};
Console.WriteLine(jagged.Length); // 2
内側の要素数を知りたい場合は、各内側配列に対してLengthを使います。
C#Console.WriteLine(jagged[0].Length); // 2
Console.WriteLine(jagged[1].Length); // 3
まとめると、次のようになります。
| 配列の種類 | Lengthの意味 |
|---|---|
| 一次元配列 | 要素数 |
| 多次元配列 | 全次元を合わせた全要素数 |
| ジャグ配列 | 対象にした配列の要素数 |
5. LengthとCountの違い
C#では、Lengthと似たものにCountがあります。
どちらも「数」を取得するために使いますが、使う対象が異なります。
5-1. Lengthは文字列や配列で使う
Lengthは、主にstringや配列で使います。
C#string text = "Hello";
Console.WriteLine(text.Length); // 5
int[] numbers = { 1, 2, 3 };
Console.WriteLine(numbers.Length); // 3
文字列や配列の長さを取得したい場合は、基本的にLengthを使います。
5-2. CountはListやDictionaryなどのコレクションで使う
Countは、List<T>やDictionary<TKey, TValue>などのコレクションでよく使います。
C#List<string> names = new List<string> { "田中", "佐藤", "鈴木" };
Console.WriteLine(names.Count); // 3
DictionaryでもCountを使います。
C#Dictionary<string, int> scores = new Dictionary<string, int>
{
{ "田中", 80 },
{ "佐藤", 90 }
};
Console.WriteLine(scores.Count); // 2
ListやDictionaryに対してLengthを使うとエラーになります。
C#Console.WriteLine(names.Length); // エラー
5-3. CountプロパティとCount()メソッドの違い
C#には、CountプロパティとCount()メソッドがあります。
List<T>などでは、Countプロパティを使います。
C#List<int> numbers = new List<int> { 1, 2, 3 };
Console.WriteLine(numbers.Count); // 3
一方、LINQを使うとCount()メソッドを使えます。
C#using System.Linq;
int[] numbers = { 1, 2, 3 };
Console.WriteLine(numbers.Count()); // 3
見た目は似ていますが、次のように違います。
C#numbers.Count // プロパティ
numbers.Count() // メソッド
Countプロパティは値を取得するだけですが、Count()メソッドはLINQのメソッドです。
初心者のうちは、配列はLength、ListはCountと覚えておくとよいでしょう。
5-4. LINQのCount()は列挙が発生する場合がある
LINQのCount()は便利ですが、対象によっては中身を順番に数える処理が発生する場合があります。
たとえば、次のように条件に合う要素数を数える場合です。
C#using System.Linq;
int[] numbers = { 1, 2, 3, 4, 5 };
int count = numbers.Count(n => n >= 3);
Console.WriteLine(count); // 3
この場合、各要素を確認しながら条件に合う数を数えます。
また、IEnumerable<T>のように要素数をすぐに取得できないデータに対してCount()を使うと、全要素を列挙する可能性があります。
そのため、単純に配列の要素数を知りたいだけなら、Count()ではなくLengthを使うのが基本です。
C#int[] numbers = { 1, 2, 3 };
Console.WriteLine(numbers.Length); // 推奨
5-5. 配列ではLength、ListではCountを使うのが基本
C#では、基本的に次のように使い分けます。
C#int[] array = { 1, 2, 3 };
Console.WriteLine(array.Length); // 配列はLength
List<int> list = new List<int> { 1, 2, 3 };
Console.WriteLine(list.Count); // ListはCount
配列にCountプロパティはありません。
C#Console.WriteLine(array.Count); // エラー
ただし、LINQを使えば配列に対してCount()メソッドを使うことはできます。
C#using System.Linq;
Console.WriteLine(array.Count()); // 3
しかし、配列の要素数を取得するだけならLengthのほうが自然です。
5-6. LengthとCountの使い分け早見表
LengthとCountの使い分けは、次の表で覚えるとわかりやすいです。
| 対象 | 使うもの | 例 |
|---|---|---|
| 文字列 | Length | text.Length |
| 配列 | Length | array.Length |
| 多次元配列の全要素数 | Length | matrix.Length |
| 多次元配列の各次元 | GetLength | matrix.GetLength(0) |
| List | Count | list.Count |
| Dictionary | Count | dictionary.Count |
| LINQで条件に合う数を数える | Count() | items.Count(x => x > 0) |
迷ったときは、配列や文字列ならLength、コレクションならCountと考えるとよいでしょう。
6. Lengthを使うときによくあるエラーと対処法
Lengthはシンプルなプロパティですが、初心者がつまずきやすいエラーもあります。
ここでは、よくある間違いと対処法を紹介します。
6-1. Length()と書いてエラーになる
Lengthはメソッドではなくプロパティです。
そのため、次のように()を付けるとエラーになります。
C#string text = "Hello";
Console.WriteLine(text.Length()); // エラー
正しくは次のように書きます。
C#Console.WriteLine(text.Length); // 5
Lengthは値のように扱う、と覚えておきましょう。
6-2. lengthと小文字で書いてエラーになる
C#は大文字と小文字を区別します。
そのため、Lengthをlengthと書くとエラーになります。
C#string text = "Hello";
Console.WriteLine(text.length); // エラー
正しくは、先頭を大文字にしてLengthです。
C#Console.WriteLine(text.Length); // 5
C#では、プロパティ名やメソッド名の大文字・小文字が正確でないとコンパイルエラーになります。
6-3. nullの文字列や配列にLengthを使ってエラーになる
nullの文字列や配列に対してLengthを使うと、NullReferenceExceptionが発生します。
C#string text = null;
Console.WriteLine(text.Length); // 実行時エラー
nullの可能性がある場合は、事前に確認しましょう。
C#string text = null;
if (text != null)
{
Console.WriteLine(text.Length);
}
else
{
Console.WriteLine("textはnullです");
}
文字列の場合は、string.IsNullOrEmptyもよく使います。
C#string text = null;
if (string.IsNullOrEmpty(text))
{
Console.WriteLine("nullまたは空文字です");
}
null条件演算子を使う方法もあります。
C#string text = null;
Console.WriteLine(text?.Length); // null
text?.Lengthは、textがnullの場合に例外を出さず、結果としてnullを返します。
6-4. ループ条件で「<= Length」と書いて範囲外エラーになる
配列をfor文で処理するときに、次のように書くとエラーになります。
C#int[] numbers = { 10, 20, 30 };
for (int i = 0; i <= numbers.Length; i++)
{
Console.WriteLine(numbers[i]); // エラー
}
numbers.Lengthは3ですが、配列のインデックスは0、1、2です。
i <= numbers.Lengthにすると、最後にiが3になり、numbers[3]へアクセスしてしまいます。
正しくは、< Lengthです。
C#for (int i = 0; i < numbers.Length; i++)
{
Console.WriteLine(numbers[i]);
}
配列のループでは、基本的にi < array.Lengthと書きましょう。
6-5. ListにLengthを使ってエラーになる
List<T>にはLengthはありません。
C#List<int> numbers = new List<int> { 1, 2, 3 };
Console.WriteLine(numbers.Length); // エラー
List<T>の要素数を取得するには、Countを使います。
C#Console.WriteLine(numbers.Count); // 3
配列はLength、ListはCountです。
6-6. Count()とLengthを混同してエラーになる
LengthとCount()を混同すると、エラーや不自然なコードの原因になります。
文字列や配列では、基本的にLengthを使います。
C#string text = "Hello";
Console.WriteLine(text.Length); // 5
int[] numbers = { 1, 2, 3 };
Console.WriteLine(numbers.Length); // 3
ListではCountを使います。
C#List<int> list = new List<int> { 1, 2, 3 };
Console.WriteLine(list.Count); // 3
LINQのCount()を使うには、using System.Linq;が必要です。
C#using System.Linq;
int[] numbers = { 1, 2, 3 };
Console.WriteLine(numbers.Count()); // 3
ただし、配列の要素数を取得したいだけなら、Count()ではなくLengthを使いましょう。
7. 実践でよく使うLengthの活用例
ここでは、実際のプログラムでよく使うLengthの活用例を紹介します。
7-1. 文字列が空かどうかを判定する
文字列が空かどうかを確認するには、Lengthを使えます。
C#string input = "";
if (input.Length == 0)
{
Console.WriteLine("入力されていません");
}
else
{
Console.WriteLine("入力されています");
}
ただし、inputがnullの可能性がある場合は、string.IsNullOrEmptyを使うほうが安全です。
C#string input = null;
if (string.IsNullOrEmpty(input))
{
Console.WriteLine("入力されていません");
}
7-2. 入力文字数をチェックする
ユーザー名やパスワードなどの文字数チェックにもLengthを使います。
C#string userName = "taro";
if (userName.Length < 3)
{
Console.WriteLine("ユーザー名は3文字以上にしてください");
}
else if (userName.Length > 10)
{
Console.WriteLine("ユーザー名は10文字以内にしてください");
}
else
{
Console.WriteLine("使用できるユーザー名です");
}
このように、最小文字数や最大文字数のチェックにLengthはよく使われます。
7-3. 配列に要素があるか確認する
配列に要素があるかどうかを確認するには、Lengthが0より大きいかを調べます。
C#int[] numbers = { 1, 2, 3 };
if (numbers.Length > 0)
{
Console.WriteLine("要素があります");
}
else
{
Console.WriteLine("要素がありません");
}
空の配列では、Lengthは0になります。
C#int[] empty = new int[0];
Console.WriteLine(empty.Length); // 0
7-4. 配列の最後の要素を取得する
配列の最後の要素を取得するには、Length - 1を使います。
C#string[] names = { "田中", "佐藤", "鈴木" };
string last = names[names.Length - 1];
Console.WriteLine(last); // 鈴木
配列のインデックスは0から始まるため、最後のインデックスはLength - 1になります。
ただし、空配列で同じ処理をするとエラーになるため、事前に要素があるか確認すると安全です。
C#string[] names = new string[0];
if (names.Length > 0)
{
Console.WriteLine(names[names.Length - 1]);
}
else
{
Console.WriteLine("配列は空です");
}
7-5. for文で配列や文字列を順番に処理する
Lengthは、配列や文字列を順番に処理するときにも便利です。
配列を処理する例です。
C#int[] numbers = { 10, 20, 30 };
for (int i = 0; i < numbers.Length; i++)
{
Console.WriteLine(numbers[i]);
}
文字列を1文字ずつ処理する例です。
C#string text = "ABC";
for (int i = 0; i < text.Length; i++)
{
Console.WriteLine(text[i]);
}
実行結果は次のようになります。
A
B
C
文字列も配列のようにインデックスを使って1文字ずつ取り出せます。
7-6. Lengthを使った簡単なサンプルプログラム
最後に、Lengthを使った簡単なサンプルプログラムを見てみましょう。
C#using System;
class Program
{
static void Main()
{
string[] names = { "田中", "佐藤", "鈴木" };
Console.WriteLine("登録されている人数: " + names.Length);
for (int i = 0; i < names.Length; i++)
{
Console.WriteLine((i + 1) + "人目: " + names[i]);
}
string message = "Hello C#";
Console.WriteLine("メッセージ: " + message);
Console.WriteLine("文字数: " + message.Length);
}
}
実行結果は次のようになります。
登録されている人数: 3
1人目: 田中
2人目: 佐藤
3人目: 鈴木
メッセージ: Hello C#
文字数: 8
このサンプルでは、配列の要素数と文字列の文字数をLengthで取得しています。
8. C#のLengthに関するよくある質問
ここでは、C#のLengthについてよくある質問に回答します。
8-1. LengthとLongLengthの違いは?
配列には、LengthのほかにLongLengthというプロパティがあります。
C#int[] numbers = { 1, 2, 3 };
Console.WriteLine(numbers.Length); // 3
Console.WriteLine(numbers.LongLength); // 3
違いは、戻り値の型です。
| プロパティ | 戻り値の型 |
|---|---|
Length | int |
LongLength | long |
通常の配列ではLengthを使えば十分です。
非常に大きな配列で、要素数がintの範囲を超える可能性がある場合にLongLengthを使います。
初心者のうちは、基本的にLengthを使うと覚えておけば問題ありません。
8-2. LengthとGetLengthの違いは?
Lengthは、配列全体の要素数を返します。
C#int[,] matrix = new int[2, 3];
Console.WriteLine(matrix.Length); // 6
一方、GetLengthは指定した次元の要素数を返します。
C#Console.WriteLine(matrix.GetLength(0)); // 2
Console.WriteLine(matrix.GetLength(1)); // 3
2次元配列で行数や列数を知りたい場合は、GetLengthを使います。
| 使い方 | 意味 |
|---|---|
array.Length | 全要素数 |
array.GetLength(0) | 1つ目の次元の長さ |
array.GetLength(1) | 2つ目の次元の長さ |
一次元配列ではLength、多次元配列で各次元の長さを知りたいときはGetLengthと考えましょう。
8-3. string.Lengthと文字数カウントは完全に同じ?
完全に同じとは限りません。
string.Lengthは、C#内部のcharの数を返します。
通常の英数字や日本語の多くでは、見た目の文字数とLengthの値が一致します。
C#Console.WriteLine("abc".Length); // 3
Console.WriteLine("こんにちは".Length); // 5
しかし、絵文字など一部の文字では、見た目は1文字でもLengthが2以上になることがあります。
C#Console.WriteLine("😀".Length); // 2
そのため、ユーザーが画面上で見る文字数を厳密に数えたい場合は、Lengthだけでは不十分なことがあります。
8-4. 配列のLengthは変更できる?
配列のLengthは変更できません。
C#int[] numbers = { 1, 2, 3 };
numbers.Length = 5; // エラー
C#の配列は、一度作成するとサイズが固定されます。
要素数を増やしたり減らしたりしたい場合は、List<T>を使いましょう。
C#List<int> numbers = new List<int>();
numbers.Add(1);
numbers.Add(2);
Console.WriteLine(numbers.Count); // 2
配列は固定サイズ、Listは可変サイズと覚えるとわかりやすいです。
8-5. 要素があるか調べるならLengthとAny()のどちらがよい?
配列に要素があるか調べるだけなら、Length > 0で問題ありません。
C#int[] numbers = { 1, 2, 3 };
if (numbers.Length > 0)
{
Console.WriteLine("要素があります");
}
LINQのAny()を使うこともできます。
C#using System.Linq;
if (numbers.Any())
{
Console.WriteLine("要素があります");
}
配列の場合はLength > 0がシンプルです。
一方、IEnumerable<T>のようなデータでは、Any()のほうが自然な場合があります。
C#IEnumerable<int> numbers = GetNumbers();
if (numbers.Any())
{
Console.WriteLine("要素があります");
}
対象が配列ならLength > 0、LINQで扱う列挙可能なデータならAny()と考えるとよいでしょう。
8-6. LengthとCountはどちらが速い?
単純な配列やListであれば、LengthやCountプロパティは高速に要素数を取得できます。
配列では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);
どちらが速いかよりも、対象に合ったものを使うことが重要です。
一方で、LINQのCount()メソッドは、対象によっては要素を順番に数える処理が発生することがあります。
C#int count = items.Count();
そのため、配列ならLength、ListならCount、LINQで条件に合う件数を数えたい場合はCount()というように使い分けるのが基本です。
まとめ
C#のLengthは、文字列や配列の長さを取得するための基本的なプロパティです。
文字列に使うと文字数、配列に使うと要素数を取得できます。
C#string text = "Hello";
Console.WriteLine(text.Length); // 5
int[] numbers = { 1, 2, 3 };
Console.WriteLine(numbers.Length); // 3
Lengthはメソッドではないため、Length()ではなくLengthと書きます。
また、C#では大文字と小文字が区別されるため、lengthではなくLengthと正しく書く必要があります。
LengthとCountの使い分けは、次のように覚えるとわかりやすいです。
| 対象 | 使うもの |
|---|---|
| 文字列 | Length |
| 配列 | Length |
| 多次元配列の各次元 | GetLength |
| List | Count |
| Dictionary | Count |
| LINQ | Count() |
初心者のうちは、まず「文字列と配列はLength、ListやDictionaryはCount」と覚えておけば問題ありません。
Lengthは、文字数チェック、配列のループ、最後の要素の取得、空データの判定など、C#の実践的なプログラムで頻繁に使います。
基本的な使い方と注意点を理解して、正しく使えるようにしておきましょう。

