Enumerable.Cast<TResult>(IEnumerable) Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Omvandlar elementen i en IEnumerable till den angivna typen.
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)
Typparametrar
- TResult
Den typ som elementen ska omvandlas source till.
Parametrar
- source
- IEnumerable
Det IEnumerable som innehåller de element som ska gjutas för att skriva TResult.
Returer
En IEnumerable<T> som innehåller varje element i källsekvensen som gjuts till den angivna typen.
Undantag
source är null.
Ett element i sekvensen kan inte gjutas för att skriva TResult.
Exempel
Följande kodexempel visar hur du använder Cast<TResult>(IEnumerable) för att aktivera användningen av standardfrågeoperatorerna på en 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
Kommentarer
Den här metoden implementeras med uppskjuten körning. Det omedelbara returvärdet är ett objekt som lagrar all information som krävs för att utföra åtgärden. Frågan som representeras av den här metoden körs inte förrän objektet räknas upp antingen genom att anropa metoden GetEnumerator direkt eller med hjälp av foreach i C# eller For Each i Visual Basic.
Med Cast<TResult>(IEnumerable) metoden kan standardfrågeoperatorerna anropas i icke-generiska samlingar genom att ange nödvändig typinformation. Implementerar till exempel ArrayList inte IEnumerable<T>, men genom att anropa Cast<TResult>(IEnumerable)ArrayList objektet kan standardfrågeoperatorerna sedan användas för att köra frågor mot sekvensen.
Om ett element inte kan konverteras till typen TResultgenererar den här metoden en InvalidCastException.
Källsekvensen för den här metoden är IEnumerable, vilket innebär att elementen har den statiska kompileringstypen object. De enda typkonverteringar som utförs med den här metoden är referenskonverteringar och avboxningskonverteringar. Körningstypen för elementen i samlingen måste matcha måltypen, eller om det gäller värdetyper måste körningstypen av element vara resultatet av en boxningskonvertering av måltypen. Andra konverteringstyper, till exempel de mellan olika numeriska typer, tillåts inte.
Om du bara vill hämta de element som kan konverteras till typen TResultanvänder du OfType metoden i stället för Cast<TResult>(IEnumerable).
I ett frågeuttryck översätts en explicit typ av iterationsvariabel till ett anrop av Cast<TResult>(IEnumerable). I det här exemplet visas syntaxen för en uttryckligen angiven intervallvariabel.
from int i in objects
From i As Integer In objects
Använd satsen för select en fråga för att utföra andra konverteringstyper, till exempel implicita numeriska konverteringar. I följande exempel används både Cast -metoden och en select -instruktion för att konvertera en sekvens med boxade heltal till en sekvens med dubbelgångare.
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)