我想知道是否有人可以解释什么 Func<int, string> 是以及如何使用一些清晰的示例。

有帮助吗?

解决方案

您熟悉一般的代表?我有一个页面了解委托和事件这可能有助于如果不是,虽然这是朝着更适应说明两者之间的差异。

Func<T, TResult> 只是一个普通的委托 - 找出是什么意思在通过与声明相应的类型参数TTResult)替换型参数intstring)任何特定情形。我还重新命名以避免混淆:

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

其他提示

A Func<int, string> 吃整数并返回字符串。那么,什么吃掉整数并返回字符串呢?这个怎么样 ...

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

在那里,我刚刚编写了一个吃整数并返回字符串的函数。我该如何使用它?

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一个参数,并返回型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和布尔值的参数,并返回浮点值。

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归因
不隶属于 StackOverflow
scroll top