Enumerable.Cast<TResult>(IEnumerable) メソッド

定義

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<TResult>

指定された型にキャストされたソース シーケンスの各要素を格納する IEnumerable<T>

例外

sourcenullです。

シーケンスの要素を 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メソッドを使用して直接またはforeachVisual C# またはFor EachVisual Basic で。

Cast<TResult>(IEnumerable)メソッドを使用すると、必要な型情報を指定することによって、標準クエリ演算子を非ジェネリックコレクションで呼び出すことができます。 たとえば、に ArrayList はが実装されていません IEnumerable<T> が、オブジェクトに対してを呼び出すことによって、 Cast<TResult>(IEnumerable) ArrayList 標準クエリ演算子を使用してシーケンスを照会できます。

要素を型に変換できない場合 TResult 、このメソッドはをスロー InvalidCastException します。

このメソッドのソースシーケンスはです。これは、 IEnumerable 要素がのコンパイル時の静的な型を持つことを意味し object ます。 このメソッドによって実行される唯一の型変換は、参照変換とボックス化解除変換です。 コレクション内の要素のランタイム型は、ターゲット型に一致する必要があります。または、値型の場合は、要素のランタイム型が、ターゲット型のボックス化変換の結果である必要があります。 異なる数値型の間の変換など、他の種類の変換は許可されません。

型に変換できる要素だけを取得するには TResult 、の代わりにメソッドを使用し OfType Cast<TResult>(IEnumerable) ます。

クエリ式では、明示的に型指定された反復変数は、の呼び出しに変換さ Cast<TResult>(IEnumerable) れます。 この例は、明示的に型指定された範囲変数の構文を示しています。

from int i in objects
From i As Integer In objects

クエリの句を使用して select 、暗黙的な数値変換など、他の種類の変換を実行します。 次の例では、メソッドとステートメントの両方を使用して、一連 Cast select のボックス化された整数のシーケンスを倍精度浮動小数点数に変換します。

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)

適用対象

こちらもご覧ください