Enumerable.AsEnumerable<TSource>(IEnumerable<TSource>) Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Menghasilkan input yang diketik sebagai 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)
Jenis parameter
- TSource
Jenis elemen source
.
Parameter
- source
- IEnumerable<TSource>
Urutan untuk mengetik sebagai IEnumerable<T>.
Mengembalikan
Urutan input ditik sebagai IEnumerable<T>.
Contoh
Contoh kode berikut menunjukkan cara menggunakan AsEnumerable<TSource>(IEnumerable<TSource>) untuk menyembunyikan metode kustom Where
jenis saat implementasi operator kueri standar diinginkan.
// 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.
Keterangan
Metode AsEnumerable<TSource>(IEnumerable<TSource>) ini tidak berpengaruh selain mengubah jenis waktu kompilasi dari jenis source
yang mengimplementasikan IEnumerable<T> ke IEnumerable<T> dirinya sendiri.
AsEnumerable<TSource>(IEnumerable<TSource>) dapat digunakan untuk memilih antara implementasi kueri saat urutan diterapkan IEnumerable<T> tetapi juga memiliki sekumpulan metode kueri publik yang berbeda yang tersedia. Misalnya, mengingat kelas Table
generik yang mengimplementasikan IEnumerable<T> dan memiliki metodenya sendiri seperti Where
, , Select
dan SelectMany
, panggilan ke Where
akan memanggil metode publik Where
.Table
Jenis Table
yang mewakili tabel database dapat memiliki Where
metode yang mengambil argumen predikat sebagai pohon ekspresi dan mengonversi pohon ke SQL untuk eksekusi jarak jauh. Jika eksekusi jarak jauh tidak diinginkan, misalnya karena predikat memanggil metode lokal, AsEnumerable metode dapat digunakan untuk menyembunyikan metode kustom dan sebaliknya membuat operator kueri standar tersedia.