Enumerable.Cast<TResult>(IEnumerable) 메서드

정의

IEnumerable의 요소를 지정된 형식으로 캐스팅합니다.Casts the elements of an IEnumerable to the specified type.

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);
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의 요소를 캐스팅할 형식입니다.The type to cast the elements of source to.

매개 변수

source
IEnumerable

TResult 형식으로 캐스팅할 요소가 들어 있는 IEnumerable입니다.The IEnumerable that contains the elements to be cast to type TResult.

반환

IEnumerable<TResult>

지정된 형식으로 캐스트된 소스 시퀀스의 각 요소가 들어 있는 IEnumerable<T>입니다.An IEnumerable<T> that contains each element of the source sequence cast to the specified type.

예외

source이(가) null인 경우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();
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

설명

이 메서드는 지연 된 실행을 사용 하 여 구현 됩니다.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 메서드를 사용 하 여 직접 또는 foreach Visual C# 또는 For Each Visual 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 이 메서드는을 throw 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. 이 메서드에서 수행 하는 유일한 형식 변환은 참조 변환과 unboxing 변환입니다.The only type conversions that are performed by this method are reference conversions and unboxing conversions. 컬렉션에 있는 요소의 런타임 형식이 대상 형식과 일치 해야 하거나, 값 형식의 경우 요소의 런타임 형식이 대상 형식에 대 한 boxing 변환의 결과 여야 합니다.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 boxed 정수 시퀀스를 double 시퀀스로 변환 합니다.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)

적용 대상

추가 정보