Enumerable.AsEnumerable<TSource>(IEnumerable<TSource>) Metodo
Definizione
Restituisce l'input tipizzato come oggetto IEnumerable<T>.Returns the input typed as 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)
Parametri di tipo
- TSource
Tipo degli elementi di source
.The type of the elements of source
.
Parametri
- source
- IEnumerable<TSource>
Sequenza da digitare come oggetto IEnumerable<T>.The sequence to type as IEnumerable<T>.
Restituisce
- IEnumerable<TSource>
Sequenza di input digitata come oggetto IEnumerable<T>.The input sequence typed as IEnumerable<T>.
Esempio
Nell'esempio di codice riportato di seguito viene illustrato come utilizzare AsEnumerable<TSource>(IEnumerable<TSource>) per nascondere il metodo personalizzato di un tipo Where
quando si desidera l'implementazione dell'operatore di query standard.The following code example demonstrates how to use AsEnumerable<TSource>(IEnumerable<TSource>) to hide a type's custom Where
method when the standard query operator implementation is desired.
// 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.
Commenti
Il AsEnumerable<TSource>(IEnumerable<TSource>) metodo non ha alcun effetto tranne che per modificare il tipo in fase di compilazione di source
da un tipo che implementa IEnumerable<T> a IEnumerable<T> se stesso.The AsEnumerable<TSource>(IEnumerable<TSource>) method has no effect other than to change the compile-time type of source
from a type that implements IEnumerable<T> to IEnumerable<T> itself.
AsEnumerable<TSource>(IEnumerable<TSource>) può essere usato per scegliere tra implementazioni di query quando una sequenza implementa IEnumerable<T> ma dispone anche di un set diverso di metodi di query pubblici disponibili.AsEnumerable<TSource>(IEnumerable<TSource>) can be used to choose between query implementations when a sequence implements IEnumerable<T> but also has a different set of public query methods available. Ad esempio, data una classe generica Table
che implementa IEnumerable<T> e ha i propri metodi, ad esempio, Where
Select
e SelectMany
, una chiamata a Where
richiama il Where
Metodo pubblico di Table
.For example, given a generic class Table
that implements IEnumerable<T> and has its own methods such as Where
, Select
, and SelectMany
, a call to Where
would invoke the public Where
method of Table
. Un Table
tipo che rappresenta una tabella di database può avere un Where
metodo che accetta l'argomento del predicato come albero delle espressioni e converte l'albero in SQL per l'esecuzione remota.A Table
type that represents a database table could have a Where
method that takes the predicate argument as an expression tree and converts the tree to SQL for remote execution. Se l'esecuzione remota non è desiderata, ad esempio perché il predicato richiama un metodo locale, il AsEnumerable metodo può essere usato per nascondere i metodi personalizzati e rendere invece disponibili gli operatori di query standard.If remote execution is not desired, for example because the predicate invokes a local method, the AsEnumerable method can be used to hide the custom methods and instead make the standard query operators available.