コレクションのターゲット型指定
ターゲット型にコレクション作成を任せます。
「コレクションのターゲット型指定」はCoddyKit上の無料C# Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC# Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C# Academyコースには全4レッスンが含まれています。
ターゲット型推論とは
ターゲット型推論とは、右辺に明示的な型を指定するのではなく、コレクション式が使用されるコンテキストから、コンパイラが何を構築するかを推論する仕組みです。
using System;
int[] numbers = [1, 2, 3]; // target type is int[]
Console.WriteLine(numbers.GetType().Name); // Int32[]ターゲットが型を決める
同じリテラルでも、代入先の変数、パラメーター、または戻り値の型に応じて、異なる具体的な型になります。
using System;
using System.Collections.Generic;
int[] asArray = [1, 2, 3];
List<int> asList = [1, 2, 3];
Console.WriteLine(asArray is int[]); // True
Console.WriteLine(asList is List<int>); // Trueメソッド呼び出しでのターゲット型推論
メソッドのパラメーターがコレクション型の場合、引数のリテラルはそのパラメーターをターゲット型として推論されます。
using System;
using System.Collections.Generic;
static void Show(List<int> items) =>
Console.WriteLine(string.Join(",", items));
Show([10, 20, 30]); // target-typed to List<int>戻り値でのターゲット型推論
メソッド本体では、コレクション式を単独で返せます。宣言された戻り値の型がターゲット型になります。
using System;
using System.Collections.Generic;
static List<string> Tags() => ["csharp", "dotnet", "ranges"];
Console.WriteLine(Tags().Count); // 3要素型の推論
要素型はターゲット型から決まります。ターゲットが double[] の場合、整数リテラルは自動的に double に拡大変換されます。
using System;
double[] values = [1, 2, 3]; // ints widen to double
Console.WriteLine(values[0] + 0.5); // 1.5ターゲットとしてのインターフェイス
コレクション式のターゲットには、IEnumerable<T>、IReadOnlyList<T>、ICollection<T> などのインターフェイスも指定できます。コンパイラが適切な具象型を選択します。
using System;
using System.Collections.Generic;
IReadOnlyList<int> ro = [1, 2, 3];
Console.WriteLine(ro.Count); // 3三項演算子とターゲット型推論
条件式の両方の分岐をコレクション式にでき、それぞれが共通の結果型をターゲットとして推論されます。
using System;
bool useDefaults = false;
int[] config = useDefaults ? [0, 0, 0] : [1, 2, 3];
Console.WriteLine(string.Join(",", config)); // 1,2,3var はターゲットにならない
var x = [1, 2, 3]; と記述することはできません。var はターゲット型を提供しないためです。明示的な型を指定するか、型が必要な場所で式を使用してください。
using System;
// var x = [1, 2, 3]; // compile error: no target type
int[] x = [1, 2, 3]; // ok
Console.WriteLine(x.Length); // 3スプレッドでのターゲット型推論
ターゲット型推論とスプレッドは連携します。ターゲットが最終的なコレクション型を決め、スプレッドがその内容を提供します。
using System;
using System.Collections.Generic;
int[] src = [1, 2, 3];
List<int> copy = [..src]; // copies into a List<int>
Console.WriteLine(copy is List<int>); // True記述量を減らす
ターゲット型推論によって、型名の繰り返しを省けます。冗長な従来の形式と簡潔な新しい形式を比較してください。
using System;
// old: type repeated
int[] oldWay = new int[] { 1, 2, 3 };
// new: type only on the left
int[] newWay = [1, 2, 3];
Console.WriteLine(oldWay.Length == newWay.Length); // True総合例
ここでは、1つのヘルパーが任意の読み取り専用コレクションを受け取り、呼び出し側がターゲット型付きリテラルを自由に渡しています。
using System;
using System.Collections.Generic;
static int Count(IReadOnlyCollection<int> c) => c.Count;
Console.WriteLine(Count([1, 2, 3, 4])); // 4理解度チェック
ターゲット型推論を理解できているか確認しましょう。
まとめ
コレクション式でターゲット型がどのように推論されるかを学びました。
- 代入先の型(変数、パラメーター、戻り値)が構築方法を決めます。
- 要素型はターゲット型に合わせて拡大変換される場合があります。
IReadOnlyList<T>などのインターフェイスも有効なターゲットです。varはターゲットになりません。
よくある質問
「コレクションのターゲット型指定」レッスンは無料ですか?
はい。「コレクションのターゲット型指定」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C# Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C# Academyコースには全4レッスンが含まれています。
「コレクションのターゲット型指定」で何を学びますか?
ターゲット型にコレクション作成を任せます。 ブラウザで直接実行するハンズオンコードでC# Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
C# Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのC# Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「コレクションのターゲット型指定」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このC# Academyレッスンでコードを書いて実行できますか?
はい。すべてのC# Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- コレクション式の構文
- Spread要素
- コレクションのターゲット型指定
- コレクションビルダー