Enumerable.Cast<TResult>(IEnumerable) メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
IEnumerable の要素を、指定した型にキャストします。
public:
generic <typename TResult>
[System::Runtime::CompilerServices::Extension]
static System::Collections::Generic::IEnumerable<TResult> ^ Cast(System::Collections::IEnumerable ^ source);
public static System.Collections.Generic.IEnumerable<TResult> Cast<TResult> (this System.Collections.IEnumerable source);
static member Cast : System.Collections.IEnumerable -> seq<'Result>
<Extension()>
Public Function Cast(Of TResult) (source As IEnumerable) As IEnumerable(Of TResult)
型パラメーター
- TResult
source
の要素のキャスト後の型。
パラメーター
- source
- IEnumerable
TResult
型にキャストされる要素が格納されている IEnumerable。
戻り値
指定された型にキャストされたソース シーケンスの各要素を格納する IEnumerable<T>。
例外
source
が null
です。
シーケンスの要素を TResult
型にキャストできません。
例
次のコード例では、 を使用 Cast<TResult>(IEnumerable) して、 の標準クエリ演算子の使用を有効にする方法を ArrayList示します。
System.Collections.ArrayList fruits = new System.Collections.ArrayList();
fruits.Add("mango");
fruits.Add("apple");
fruits.Add("lemon");
IEnumerable<string> query =
fruits.Cast<string>().OrderBy(fruit => fruit).Select(fruit => fruit);
// The following code, without the cast, doesn't compile.
//IEnumerable<string> query1 =
// fruits.OrderBy(fruit => fruit).Select(fruit => fruit);
foreach (string fruit in query)
{
Console.WriteLine(fruit);
}
// This code produces the following output:
//
// apple
// lemon
// mango
' Create an ArrayList and add items to it.
Dim fruits As New System.Collections.ArrayList()
fruits.Add("mango")
fruits.Add("apple")
fruits.Add("lemon")
' Call Cast(Of String) to cast the ArrayList elements to strings.
Dim query As IEnumerable(Of String) =
fruits.Cast(Of String)().OrderBy(Function(fruit) fruit).Select(Function(fruit) fruit)
'' The following code, without the cast, doesn't compile.
'Dim query As IEnumerable(Of String) = _
' fruits.OrderBy(Function(fruit) fruit).Select(Function(fruit) fruit)
Dim output As New System.Text.StringBuilder
For Each fruit As String In query
output.AppendLine(fruit)
Next
' Display the output.
Console.WriteLine(output.ToString())
' This code produces the following output:
'
' apple
' lemon
' mango
注釈
このメソッドは、遅延実行を使用して実装されます。 即時戻り値は、アクションの実行に必要なすべての情報を格納する オブジェクトです。 このメソッドで表されるクエリは、オブジェクトがメソッドを直接呼び出GetEnumerator
すか、C# または For Each
Visual Basic で を使用foreach
して列挙されるまで実行されません。
Cast<TResult>(IEnumerable)メソッドを使用すると、必要な型情報を指定することで、標準のクエリ演算子を非ジェネリック コレクションで呼び出すことができます。 たとえば、 ArrayList は を実装IEnumerable<T>しませんが、 オブジェクトで をArrayList呼び出Cast<TResult>(IEnumerable)すことによって、標準のクエリ演算子を使用してシーケンスのクエリを実行できます。
要素を 型 TResult
に変換できない場合、このメソッドは を InvalidCastExceptionスローします。
このメソッドのソース シーケンスは です IEnumerable。これは、要素のコンパイル時の静的型が であることを object
意味します。 このメソッドによって実行される型変換は、参照変換とボックス化解除変換のみです。 コレクション内の要素のランタイム型はターゲット型と一致する必要があります。値型の場合、要素のランタイム型はターゲット型のボックス化変換の結果である必要があります。 他の変換型 (異なる数値型間など) は使用できません。
型TResult
に変換できる要素のみを取得するには、 ではなく Cast<TResult>(IEnumerable)メソッドをOfType使用します。
クエリ式では、明示的に型指定された反復変数は の Cast<TResult>(IEnumerable)呼び出しに変換されます。 この例では、明示的に型指定された範囲変数の構文を示します。
from int i in objects
From i As Integer In objects
select
暗黙的な数値変換など、他の変換型を実行するには、クエリの 句を使用します。 次の例では、 メソッドと ステートメントの Cast
両方を select
使用して、ボックス化された整数のシーケンスを double のシーケンスに変換します。
IEnumerable sequence = Enumerable.Range(0, 10);
var doubles = from int item in sequence
select (double)item;
Dim sequence As IEnumerable = Enumerable.Range(0, 10)
Dim doubles = From item As Integer In sequence
Select CType(item, Double)
適用対象
こちらもご覧ください
.NET