Enumerable.AsEnumerable<TSource>(IEnumerable<TSource>) Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Retourneert de invoer die is getypt als IEnumerable<T>.
public:
generic <typename TSource>
[System::Runtime::CompilerServices::Extension]
static System::Collections::Generic::IEnumerable<TSource> ^ AsEnumerable(System::Collections::Generic::IEnumerable<TSource> ^ source);
public static System.Collections.Generic.IEnumerable<TSource> AsEnumerable<TSource>(this System.Collections.Generic.IEnumerable<TSource> source);
static member AsEnumerable : seq<'Source> -> seq<'Source>
<Extension()>
Public Function AsEnumerable(Of TSource) (source As IEnumerable(Of TSource)) As IEnumerable(Of TSource)
Type parameters
- TSource
Het type van de elementen van source.
Parameters
- source
- IEnumerable<TSource>
De reeks die moet worden getypt als IEnumerable<T>.
Retouren
De invoerreeks die is getypt als IEnumerable<T>.
Voorbeelden
In het volgende codevoorbeeld ziet u hoe u de aangepaste Where methode van een type kunt verbergen AsEnumerable<TSource>(IEnumerable<TSource>) wanneer de implementatie van de standaardqueryoperator is gewenst.
// Custom class.
class Clump<T> : List<T>
{
// Custom implementation of Where().
public IEnumerable<T> Where(Func<T, bool> predicate)
{
Console.WriteLine("In Clump's implementation of Where().");
return Enumerable.Where(this, predicate);
}
}
static void AsEnumerableEx1()
{
// Create a new Clump<T> object.
Clump<string> fruitClump =
new Clump<string> { "apple", "passionfruit", "banana",
"mango", "orange", "blueberry", "grape", "strawberry" };
// First call to Where():
// Call Clump's Where() method with a predicate.
IEnumerable<string> query1 =
fruitClump.Where(fruit => fruit.Contains("o"));
Console.WriteLine("query1 has been created.\n");
// Second call to Where():
// First call AsEnumerable() to hide Clump's Where() method and thereby
// force System.Linq.Enumerable's Where() method to be called.
IEnumerable<string> query2 =
fruitClump.AsEnumerable().Where(fruit => fruit.Contains("o"));
// Display the output.
Console.WriteLine("query2 has been created.");
}
// This code produces the following output:
//
// In Clump's implementation of Where().
// query1 has been created.
//
// query2 has been created.
Dim output As New System.Text.StringBuilder
' A custom class.
Class Clump(Of T)
Inherits List(Of T)
' Constructor.
Public Sub New(ByVal collection As IEnumerable(Of T))
MyBase.New(collection)
End Sub
' Custom implementation of Where().
Function Where(ByVal predicate As Func(Of T, Boolean)) As IEnumerable(Of T)
output.AppendLine("In Clump's implementation of Where().")
Return Enumerable.Where(Me, predicate)
End Function
End Class
Sub AsEnumerableEx1()
' Create a new Clump(Of T) object.
Dim fruitClump As New Clump(Of String)(New String() _
{"apple", "passionfruit", "banana",
"mango", "orange", "blueberry",
"grape", "strawberry"})
' First call to Where():
' Call Clump's Where() method with a predicate.
Dim query1 As IEnumerable(Of String) =
fruitClump.Where(Function(fruit) fruit.Contains("o"))
output.AppendLine("query1 has been created." & vbCrLf)
' Second call to Where():
' First call AsEnumerable() to hide Clump's Where() method and thereby
' force System.Linq.Enumerable's Where() method to be called.
Dim query2 As IEnumerable(Of String) =
fruitClump.AsEnumerable().Where(Function(fruit) fruit.Contains("o"))
output.AppendLine("query2 has been created.")
' Display the output.
Console.WriteLine(output.ToString())
End Sub
' This code produces the following output:
'
' In Clump's implementation of Where().
' query1 has been created.
'
' query2 has been created.
Opmerkingen
De AsEnumerable<TSource>(IEnumerable<TSource>) methode heeft geen ander effect dan het type compileertijd van source een type dat op IEnumerable<T> zichzelf wordt geïmplementeerdIEnumerable<T>.
AsEnumerable<TSource>(IEnumerable<TSource>) kan worden gebruikt om te kiezen tussen queryimplementaties wanneer een reeks wordt geïmplementeerd IEnumerable<T> , maar er ook een andere set openbare querymethoden beschikbaar is. Als u bijvoorbeeld een algemene klasse Table hebt die zijn eigen methoden implementeert IEnumerable<T> en heeft, zoals Where, Selecten SelectManyeen aanroep waarmee Where de openbare Where methode Tablewordt aangeroepen. Een Table type dat een databasetabel vertegenwoordigt, kan een Where methode hebben die het predicaatargument als een expressiestructuur gebruikt en de structuur converteert naar SQL voor externe uitvoering. Als externe uitvoering niet gewenst is, bijvoorbeeld omdat het predicaat een lokale methode aanroept, kan de AsEnumerable methode worden gebruikt om de aangepaste methoden te verbergen en in plaats daarvan de standaardqueryoperators beschikbaar te maken.