簡體   English   中英

Func的解釋

[英]Explanation of Func

我想知道是否有人可以解釋一下Func<int, string>是什么以及它是如何與一些明顯的例子一起使用的。

你是否熟悉一般的代表? 我有一個關於代表和事件的頁面,如果沒有,可能會有所幫助,盡管它更適合解釋兩者之間的差異。

Func<T, TResult>只是一個泛型委托 - 通過在聲明中用相應的類型參數intstring )替換類型參數TTResult )來解決它在任何特定情況下的含義。 我也重命名它以避免混淆:

string ExpandedFunc(int x)

換句話說, Func<int, string>是一個委托,它表示一個帶有int參數並返回一個string的函數。

Func<T, TResult>經常用於LINQ,用於投影和謂詞(在后一種情況下, TResult總是bool )。 例如,您可以使用Func<int, string>將一系列整數投影到一系列字符串中。 Lambda表達式通常在LINQ中用於創建相關的委托:

Func<int, string> projection = x => "Value=" + x;
int[] values = { 3, 7, 10 };
var strings = values.Select(projection);

foreach (string s in strings)
{
    Console.WriteLine(s);
}

結果:

Value=3
Value=7
Value=10

Func<int, string>吃掉int並返回字符串。 那么,什么吃int並返回字符串? 這個怎么樣 ...

public string IntAsString( int i )
{
  return i.ToString();
}

在那里,我只是編寫了一個吃int並返回字符串的函數。 我該如何使用它?

var lst = new List<int>() { 1, 2, 3, 4, 5 };
string str = String.Empty;

foreach( int i in lst )
{
  str += IntAsString(i);
}

// str will be "12345"

我知道,這不是很性感,但這是一個很簡單的想法,很多技巧是基於。 現在,讓我們使用Func代替。

Func<int, string> fnc = IntAsString;

foreach (int i in lst)
{
  str += fnc(i);
}

// str will be "1234512345" assuming we have same str as before

我沒有在每個成員上調用IntAsString,而是創建了一個名為fnc的引用(這些對方法的引用稱為委托 )並改為使用它。 (記住fnc吃掉int並返回字符串)。

這個例子不是很性感,但是你會看到很多聰明的東西都是基於函數,委托和擴展方法的簡單概念。

我見過的最好的引物之一就在這里 他有更多真實的例子。 :)

它是一個委托,它將一個int作為參數並返回一個string類型的值。

以下是其用法示例:

using System;

class Program
{
    static void Main()
    {
        Func<Int32, String> func = bar;

        // now I have a delegate which 
        // I can invoke or pass to other
        // methods.
        func(1);
    }

    static String bar(Int32 value)
    {
        return value.ToString();
    }
}

Func<int, string>接受int值參數並返回字符串值。 這是一個不需要額外支持方法的示例。

Func<int, string> GetDogMessage = dogAge =>
        {
            if (dogAge < 3) return "You have a puppy!";
            if (dogAge < 7) return "Strong adult dog!";

            return "Age is catching up with the dog!";
        };

string youngDogMessage = GetDogMessage(2);

注意:Func中的最后一個對象類型(即本例中的“字符串”)是函數返回類型(即不限於基元,而是任何對象)。 因此, Func<int, bool, float>接受int和bool值參數,並返回一個浮點值。

Func<int, bool, float> WorthlessFunc = (intValue, boolValue) =>
        {
            if(intValue > 100 && boolValue) return 100;

            return 1;
        };
float willReturn1 = WorthlessFunc(21, false);
float willReturn100 = WorthlessFunc(1000, true);

HTH

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM