Bagikan melalui


Enumerable.AsEnumerable<TSource>(IEnumerable<TSource>) Metode

Definisi

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

IEnumerable<TSource>

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, , Selectdan 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.

Berlaku untuk