データ型の変換 (C#)
変換メソッドは、入力オブジェクトの型を変更します。
LINQ クエリの変換操作は、さまざまなアプリケーションで役に立ちます。 次にいくつかの例を示します。
- Enumerable.AsEnumerable メソッドを使用すると、標準クエリ演算子の型のカスタム実装を非表示することができます。
- Enumerable.OfType メソッドを使用すると、LINQ クエリのパラメーター化されていないコレクションを有効にすることができます。
- Enumerable.ToArray、Enumerable.ToDictionary、Enumerable.ToList、および Enumerable.ToLookup メソッドを使用すると、クエリが列挙されるまで延期させるのではなく、即時のクエリ実行を強制することができます。
メソッド
次の表には、データ型の変換を実行する標準クエリ演算子メソッドの一覧が示されています。
名前が "As" で始まるこの表の変換メソッドは、ソース コレクションの静的型を変更しますが、ソース コレクションを列挙しません。 名前が "To" で始まるメソッドは、ソース コレクションを列挙し、各項目を対応するコレクション型に変換します。
メソッド名 | 説明 | C# のクエリ式の構文 | 説明 |
---|---|---|---|
AsEnumerable | IEnumerable<T> として型指定された入力を返します。 | 該当なし。 | Enumerable.AsEnumerable |
AsQueryable | (ジェネリック) IEnumerable を (ジェネリック) IQueryable に変換します。 | 該当なし。 | Queryable.AsQueryable |
Cast | コレクションの要素を指定した型にキャストします。 | 明示的に型指定された範囲変数を使用します。 次に例を示します。from string str in words |
Enumerable.Cast Queryable.Cast |
OfType | 指定した型にキャストできるかどうかに応じて値をフィルター処理します。 | 該当なし。 | Enumerable.OfType Queryable.OfType |
ToArray | コレクションを配列に変換します。 このメソッドはクエリの実行を強制します。 | 該当なし。 | Enumerable.ToArray |
ToDictionary | キー セレクター関数に基づいて、Dictionary<TKey,TValue> に要素を変換します。 このメソッドはクエリの実行を強制します。 | 該当なし。 | Enumerable.ToDictionary |
ToList | コレクションを List<T> に変換します。 このメソッドはクエリの実行を強制します。 | 該当なし。 | Enumerable.ToList |
ToLookup | キー セレクター関数に基づいて、Lookup<TKey,TElement> (一対多の辞書) に要素を変換します。 このメソッドはクエリの実行を強制します。 | 該当なし。 | Enumerable.ToLookup |
この記事の次の例では、この分野の一般的なデータ ソースが使用されています。
public enum GradeLevel
{
FirstYear = 1,
SecondYear,
ThirdYear,
FourthYear
};
public class Student
{
public required string FirstName { get; init; }
public required string LastName { get; init; }
public required int ID { get; init; }
public required GradeLevel Year { get; init; }
public required List<int> Scores { get; init; }
public required int DepartmentID { get; init; }
}
public class Teacher
{
public required string First { get; init; }
public required string Last { get; init; }
public required int ID { get; init; }
public required string City { get; init; }
}
public class Department
{
public required string Name { get; init; }
public int ID { get; init; }
public required int TeacherID { get; init; }
}
各 Student
は、学年、主要学科、一連のスコアを持っています。 Teacher
は、その教師が授業を受け持つキャンパスを示す City
プロパティも持っています。 Department
には名称と、学科長を務める Teacher
への参照があります。
クエリ式の構文例
次のコード例では、サブタイプでのみ使用できるメンバーにアクセスする前に、明示的に型指定された範囲変数を使用して、型をそのサブタイプにキャストしています。
IEnumerable people = students;
var query = from Student student in students
where student.Year == GradeLevel.ThirdYear
select student;
foreach (Student student in query)
{
Console.WriteLine(student.FirstName);
}
次の例に示すように、同等のクエリはメソッド構文を使用して表現できます。
IEnumerable people = students;
var query = people
.Cast<Student>()
.Where(student => student.Year == GradeLevel.ThirdYear);
foreach (Student student in query)
{
Console.WriteLine(student.FirstName);
}
関連項目
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示