Baca dalam bahasa Inggris

Bagikan melalui


Func<T,TResult> Delegasikan

Definisi

Merangkum metode yang memiliki satu parameter dan mengembalikan nilai jenis yang ditentukan oleh TResult parameter .

C#
public delegate TResult Func<in T,out TResult>(T arg);
C#
public delegate TResult Func<T,TResult>(T arg);

Jenis parameter

T

Jenis parameter metode yang dienkapsulasi delegasi ini.

Parameter jenis ini bersifat kontravarian. Artinya, Anda bisa menggunakan jenis yang Anda tentukan atau jenis apa pun yang tidak banyak diturunkan. Untuk informasi lebih lanjut tentang kovariansi dan kontravariansi, lihat Kovariansi dan Kontravariansi dalam Generik.
TResult

Jenis nilai pengembalian metode yang dienkapsulasi delegasi ini.

Parameter jenis ini bersifat kovarian. Artinya, Anda bisa menggunakan jenis yang Anda tentukan atau jenis apa pun yang lebih banyak diturunkan. Untuk informasi lebih lanjut tentang kovariansi dan kontravariansi, lihat Kovariansi dan Kontravariansi dalam Generik.

Parameter

arg
T

Parameter metode yang dienkapsulasi delegasi ini.

Tampilkan Nilai

TResult

Nilai pengembalian metode yang dienkapsulasi delegasi ini.

Contoh

Contoh berikut menunjukkan cara mendeklarasikan dan menggunakan Func<T,TResult> delegasi. Contoh ini mendeklarasikan Func<T,TResult> variabel dan menetapkan ekspresi lambda yang mengonversi karakter dalam string menjadi huruf besar. Delegasi yang merangkum metode ini kemudian diteruskan ke Enumerable.Select metode untuk mengubah string dalam array string menjadi huruf besar.

C#
// Declare a Func variable and assign a lambda expression to the
// variable. The method takes a string and converts it to uppercase.
Func<string, string> selector = str => str.ToUpper();

// Create an array of strings.
string[] words = { "orange", "apple", "Article", "elephant" };
// Query the array and select strings according to the selector method.
IEnumerable<String> aWords = words.Select(selector);

// Output the results to the console.
foreach (String word in aWords)
    Console.WriteLine(word);

/*
This code example produces the following output:

ORANGE
APPLE
ARTICLE
ELEPHANT

*/

Keterangan

Anda dapat menggunakan delegasi ini untuk mewakili metode yang dapat diteruskan sebagai parameter tanpa secara eksplisit menyatakan delegasi kustom. Metode yang dienkapsulasi harus sesuai dengan tanda tangan metode yang ditentukan oleh delegasi ini. Ini berarti bahwa metode yang dienkapsulasi harus memiliki satu parameter yang diteruskan ke dalamnya berdasarkan nilai, dan harus mengembalikan nilai.

Catatan

Untuk mereferensikan metode yang memiliki satu parameter dan mengembalikan void (atau di Visual Basic, yang dinyatakan sebagai Sub bukan sebagai Function), gunakan delegasi generik Action<T> sebagai gantinya.

Saat Anda menggunakan Func<T,TResult> delegasi, Anda tidak perlu secara eksplisit menentukan delegasi yang merangkum metode dengan satu parameter. Misalnya, kode berikut secara eksplisit mendeklarasikan delegasi bernama ConvertMethod dan menetapkan referensi ke UppercaseString metode ke instans delegasinya.

C#
using System;

delegate string ConvertMethod(string inString);

public class DelegateExample
{
   public static void Main()
   {
      // Instantiate delegate to reference UppercaseString method
      ConvertMethod convertMeth = UppercaseString;
      string name = "Dakota";
      // Use delegate instance to call UppercaseString method
      Console.WriteLine(convertMeth(name));
   }

   private static string UppercaseString(string inputString)
   {
      return inputString.ToUpper();
   }
}

Contoh berikut menyederhanakan kode ini dengan membuat instans delegasi Func<T,TResult> alih-alih secara eksplisit mendefinisikan delegasi baru dan menetapkan metode bernama ke dalamnya.

C#
// Instantiate delegate to reference UppercaseString method
Func<string, string> convertMethod = UppercaseString;
string name = "Dakota";
// Use delegate instance to call UppercaseString method
Console.WriteLine(convertMethod(name));

string UppercaseString(string inputString)
{
   return inputString.ToUpper();
}

// This code example produces the following output:
//
//    DAKOTA

Anda juga dapat menggunakan Func<T,TResult> delegasi dengan metode anonim di C#, seperti yang diilustrasikan contoh berikut. (Untuk pengenalan metode anonim, lihat Metode Anonim.)

C#
 Func<string, string> convert = delegate(string s)
    { return s.ToUpper();};

 string name = "Dakota";
 Console.WriteLine(convert(name));

// This code example produces the following output:
//
//    DAKOTA

Anda juga dapat menetapkan ekspresi lambda ke Func<T,TResult> delegasi, seperti yang diilustrasikan contoh berikut. (Untuk pengenalan ekspresi lambda, lihat Ekspresi Lambda (VB), Ekspresi Lambda (C#) dan Ekspresi Lambda (F#).)

C#
Func<string, string> convert = s => s.ToUpper();

string name = "Dakota";
Console.WriteLine(convert(name));

// This code example produces the following output:
//
//    DAKOTA

Jenis ekspresi lambda yang mendasar adalah salah satu delegasi generik Func . Ini memungkinkan untuk meneruskan ekspresi lambda sebagai parameter tanpa secara eksplisit menetapkannya ke delegasi. Secara khusus, karena banyak metode jenis di System.Linq namespace memiliki Func<T,TResult> parameter, Anda dapat meneruskan metode ini ekspresi lambda tanpa secara eksplisit membuat Func<T,TResult> instans delegasi.

Metode Ekstensi

GetMethodInfo(Delegate)

Mendapatkan objek yang mewakili metode yang diwakili oleh delegasi yang ditentukan.

Berlaku untuk

Produk Versi
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Lihat juga