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


IEnumerable の要素を、指定した型にキャストします。Casts the elements of an IEnumerable to the specified type.

generic <typename TResult>
 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>
Public Function Cast(Of TResult) (source As IEnumerable) As IEnumerable(Of TResult)



source の要素のキャスト後の型。The type to cast the elements of source to.



TResult 型にキャストされる要素が格納されている IEnumerableThe IEnumerable that contains the elements to be cast to type TResult.



指定された型にキャストされたソース シーケンスの各要素を格納する IEnumerable<T>An IEnumerable<T> that contains each element of the source sequence cast to the specified type.


sourcenullです。source is null.

シーケンスの要素を TResult 型にキャストできません。An element in the sequence cannot be cast to type TResult.

次のコード例は、を使用して、で標準クエリ演算子を使用できるようにする方法を示して Cast<TResult>(IEnumerable) ArrayList います。The following code example demonstrates how to use Cast<TResult>(IEnumerable) to enable the use of the standard query operators on an ArrayList.

System.Collections.ArrayList fruits = new System.Collections.ArrayList();

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)

// This code produces the following output:
// apple
// lemon
// mango
' Create an ArrayList and add items to it.
Dim fruits As New System.Collections.ArrayList()

' 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

' Display the output.

' This code produces the following output:
' apple
' lemon
' mango


このメソッドは、遅延実行を使用して実装されます。This method is implemented by using deferred execution. イミディエイトの戻り値は、アクションを実行するために必要なすべての情報を格納するオブジェクトです。The immediate return value is an object that stores all the information that is required to perform the action. か、呼び出すことによって、オブジェクトが列挙されるまで、このメソッドによって表されるクエリは実行されません、GetEnumeratorメソッドを使用して直接またはforeachVisual C# またはFor EachVisual Basic で。The query represented by this method is not executed until the object is enumerated either by calling its GetEnumerator method directly or by using foreach in Visual C# or For Each in Visual Basic.

Cast<TResult>(IEnumerable)メソッドを使用すると、必要な型情報を指定することによって、標準クエリ演算子を非ジェネリックコレクションで呼び出すことができます。The Cast<TResult>(IEnumerable) method enables the standard query operators to be invoked on non-generic collections by supplying the necessary type information. たとえば、に ArrayList はが実装されていません IEnumerable<T> が、オブジェクトに対してを呼び出すことによって、 Cast<TResult>(IEnumerable) ArrayList 標準クエリ演算子を使用してシーケンスを照会できます。For example, ArrayList does not implement IEnumerable<T>, but by calling Cast<TResult>(IEnumerable) on the ArrayList object, the standard query operators can then be used to query the sequence.

要素を型に変換できない場合 TResult 、このメソッドはをスロー InvalidCastException します。If an element cannot be converted to type TResult, this method throws a InvalidCastException.

このメソッドのソースシーケンスはです。これは、 IEnumerable 要素がのコンパイル時の静的な型を持つことを意味し object ます。The source sequence for this method is IEnumerable, which means the elements have the compile-time static type of object. このメソッドによって実行される唯一の型変換は、参照変換とボックス化解除変換です。The only type conversions that are performed by this method are reference conversions and unboxing conversions. コレクション内の要素のランタイム型は、ターゲット型に一致する必要があります。または、値型の場合は、要素のランタイム型が、ターゲット型のボックス化変換の結果である必要があります。The runtime type of the elements in the collection must match the target type, or in the case of value types, the runtime type of elements must be the result of a boxing conversion of the target type. 異なる数値型の間の変換など、他の種類の変換は許可されません。Other conversion types, such as those between different numeric types, are not allowed.

型に変換できる要素だけを取得するには TResult 、の代わりにメソッドを使用し OfType Cast<TResult>(IEnumerable) ます。To obtain only those elements that can be converted to type TResult, use the OfType method instead of Cast<TResult>(IEnumerable).

クエリ式では、明示的に型指定された反復変数は、の呼び出しに変換さ Cast<TResult>(IEnumerable) れます。In a query expression, an explicitly typed iteration variable translates to an invocation of Cast<TResult>(IEnumerable). この例は、明示的に型指定された範囲変数の構文を示しています。This example shows the syntax for an explicitly typed range variable.

from int i in objects  
From i As Integer In objects  

クエリの句を使用して select 、暗黙的な数値変換など、他の種類の変換を実行します。Use the select clause of a query to perform other conversion types, like the implicit numeric conversions. 次の例では、メソッドとステートメントの両方を使用して、一連 Cast select のボックス化された整数のシーケンスを倍精度浮動小数点数に変換します。The following example uses both the Cast method and a select statement to convert a sequence of boxed integers to a sequence of doubles.

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)