Func<T,TResult> Temsilci
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Bir parametresi olan bir yöntemi kapsüller ve parametresi tarafından TResult belirtilen türde bir değer döndürür.
generic <typename T, typename TResult>
public delegate TResult Func(T arg);
public delegate TResult Func<in T,out TResult>(T arg);
public delegate TResult Func<in T,out TResult>(T arg) where T : allows ref struct where TResult : allows ref struct;
public delegate TResult Func<T,TResult>(T arg);
type Func<'T, 'Result> = delegate of 'T -> 'Result
Public Delegate Function Func(Of In T, Out TResult)(arg As T) As TResult
Public Delegate Function Func(Of T, TResult)(arg As T) As TResult
Tür Parametreleri
- T
Bu temsilcinin kapsüllediğini yönteminin parametresinin türü.
Bu genel tür parametresi kontravaryanttır. Bu, kendi belirttiğiniz türü veya daha az türetilmiş başka bir türü kullanabileceğiniz anlamına gelir. Kovaryans ve kontravaryans hakkında daha fazla bilgi için bkz. Genel Türlerde Kovaryans ve Kontravaryans.- TResult
Bu temsilcinin kapsüllemesi yöntemin dönüş değerinin türü.
Bu genel tür parametresi kovaryanttır. Bu, kendi belirttiğiniz türü veya daha fazla türetilmiş başka bir türü kullanabileceğiniz anlamına gelir. Kovaryans ve kontravaryans hakkında daha fazla bilgi için bkz. Genel Türlerde Kovaryans ve Kontravaryans.Parametreler
- arg
- T
Bu temsilcinin kapsüllediğini yönteminin parametresi.
Dönüş Değeri
Bu temsilcinin kapsüllemesi yöntemin dönüş değeri.
Örnekler
Aşağıdaki örnekte temsilci Func<T,TResult> bildirme ve kullanma işlemleri gösterilmektedir. Bu örnek bir Func<T,TResult> değişken bildirir ve bir dizedeki karakterleri büyük harfe dönüştüren bir lambda ifadesi atar. Bu yöntemi kapsülleyen temsilci daha sonra bir dize dizisindeki dizeleri büyük harfe dönüştürmek için yöntemine geçirilir Enumerable.Select .
// 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
*/
open System
open System.Linq
// Declare a Func variable and assign a lambda expression to the
// variable. The function takes a string and converts it to uppercase.
let selector = Func<string, string>(fun str -> str.ToUpper())
// Create a list of strings.
let words = [ "orange"; "apple"; "Article"; "elephant" ]
// Query the list and select strings according to the selector function.
let aWords = words.Select selector
// Output the results to the console.
for word in aWords do
printfn $"{word}"
// This code example produces the following output:
// ORANGE
// APPLE
// ARTICLE
// ELEPHANT
Imports System.Collections.Generic
Imports System.Linq
Module Func
Public Sub Main()
' Declare a Func variable and assign a lambda expression to the
' variable. The method takes a string and converts it to uppercase.
Dim selector As Func(Of String, String) = Function(str) str.ToUpper()
' Create an array of strings.
Dim words() As String = { "orange", "apple", "Article", "elephant" }
' Query the array and select strings according to the selector method.
Dim aWords As IEnumerable(Of String) = words.Select(selector)
' Output the results to the console.
For Each word As String In aWords
Console.WriteLine(word)
Next
End Sub
End Module
' This code example produces the following output:
'
' ORANGE
' APPLE
' ARTICLE
' ELEPHANT
Açıklamalar
Özel temsilci açıkça bildirmeden parametre olarak geçirilebilen bir yöntemi temsil etmek için bu temsilciyi kullanabilirsiniz. Kapsüllenen yöntem, bu temsilci tarafından tanımlanan yöntem imzasına karşılık olmalıdır. Bu, kapsüllenmiş yöntemin değere göre geçirilen bir parametresi olması ve bir değer döndürmesi gerektiği anlamına gelir.
Note
Bir parametresi olan ve void (veya Sub olarak değil Function olarak bildirilen Visual Basic) döndüren bir yönteme başvurmak için, bunun yerine genel Action<T> temsilcisini kullanın.
Temsilciyi Func<T,TResult> kullandığınızda, bir yöntemi tek bir parametreyle kapsülleyen bir temsilciyi açıkça tanımlamanız gerekmez. Örneğin, aşağıdaki kod adlı ConvertMethod bir temsilciyi açıkça bildirir ve yöntemine UppercaseString temsilci örneğine bir başvuru atar.
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();
}
}
type ConvertMethod = delegate of string -> string
let uppercaseString (inputString: string) =
inputString.ToUpper()
// Instantiate delegate to reference uppercaseString function
let convertMeth = ConvertMethod uppercaseString
let name = "Dakota"
// Use delegate instance to call uppercaseString function
printfn $"{convertMeth.Invoke name}"
' Declare a delegate to represent string conversion method
Delegate Function ConvertMethod(ByVal inString As String) As String
Module DelegateExample
Public Sub Main()
' Instantiate delegate to reference UppercaseString method
Dim convertMeth As ConvertMethod = AddressOf UppercaseString
Dim name As String = "Dakota"
' Use delegate instance to call UppercaseString method
Console.WriteLine(convertMeth(name))
End Sub
Private Function UppercaseString(inputString As String) As String
Return inputString.ToUpper()
End Function
End Module
Aşağıdaki örnek, yeni bir temsilciyi açıkça tanımlamak ve buna adlandırılmış bir yöntem atamak yerine temsilcinin Func<T,TResult> örneğini oluşturarak bu kodu basitleştirir.
// 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
open System
let uppercaseString (inputString: string) =
inputString.ToUpper()
// Instantiate delegate to reference uppercaseString function
let convertMethod = Func<string, string> uppercaseString
let name = "Dakota"
// Use delegate instance to call uppercaseString function
printfn $"{convertMethod.Invoke name}"
// This code example produces the following output:
// DAKOTA
Module GenericFunc
Public Sub Main()
' Instantiate delegate to reference UppercaseString method
Dim convertMethod As Func(Of String, String) = AddressOf UppercaseString
Dim name As String = "Dakota"
' Use delegate instance to call UppercaseString method
Console.WriteLine(convertMethod(name))
End Sub
Private Function UppercaseString(inputString As String) As String
Return inputString.ToUpper()
End Function
End Module
Aşağıdaki örnekte gösterildiği gibi temsilciyi Func<T,TResult> C# dilinde anonim yöntemlerle de kullanabilirsiniz. (Anonim yöntemlere giriş için bkz . Anonim Yöntemler.)
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
Aşağıdaki örnekte gösterildiği gibi bir lambda ifadesini temsilciye Func<T,TResult> de atayabilirsiniz. (Lambda ifadelerine giriş için bkz. Lambda İfadeleri (VB), Lambda İfadeleri (C#) ve Lambda İfadeleri (F#).)
Func<string, string> convert = s => s.ToUpper();
string name = "Dakota";
Console.WriteLine(convert(name));
// This code example produces the following output:
//
// DAKOTA
open System
let convert = Func<string, string>(fun s -> s.ToUpper())
let name = "Dakota"
printfn $"{convert.Invoke name}"
// This code example produces the following output:
// DAKOTA
Module LambdaExpression
Public Sub Main()
Dim convert As Func(Of String, String) = Function(s) s.ToUpper()
Dim name As String = "Dakota"
Console.WriteLine(convert(name))
End Sub
End Module
Lambda ifadesinin temel türü genel Func temsilcilerden biridir. Bu, bir lambda ifadesini bir temsilciye açıkça atamadan parametre olarak geçirmeyi mümkün kılar. Özellikle, ad alanında birçok tür yönteminin System.Linq parametreleri olduğundan Func<T,TResult> , bu yöntemleri açıkça bir temsilci örneği oluşturmadan bir Func<T,TResult> lambda ifadesi geçirebilirsiniz.
Uzantı Metotları
| Name | Description |
|---|---|
| GetMethodInfo(Delegate) |
Belirtilen temsilci tarafından temsil edilen yöntemi temsil eden bir nesnesi alır. |