首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >功能说明

功能说明
EN

Stack Overflow用户
提问于 2009-05-18 16:47:53
回答 4查看 65.6K关注 0票数 90

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-05-18 16:53:45

你对委托书很熟悉吗?我有一个关于delegates and events的页面,如果没有的话,它可能会有所帮助,尽管它更适合于解释两者之间的差异。

Func只是一个泛型委托-通过在声明中将类型参数(TTResult)替换为相应的类型参数(intstring),找出它在任何特定情况下的含义。为了避免混淆,我还重命名了它:

代码语言:javascript
复制
string ExpandedFunc(int x)

换句话说,Func<int, string>是一个委托,它代表一个接受int参数并返回string的函数。

在LINQ中,Func<T, TResult>通常用于投影和谓词(在后一种情况下,TResult始终为bool)。例如,您可以使用Func<int, string>将一个整数序列投影为一个字符串序列。Lambda表达式通常在LINQ中用来创建相关的委托:

代码语言:javascript
复制
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);
}

结果:

代码语言:javascript
复制
Value=3
Value=7
Value=10
票数 147
EN

Stack Overflow用户

发布于 2009-05-18 17:18:19

Func<int, string>读取int并返回字符串。那么,是什么吃了int并返回字符串呢?这个怎么样..。

代码语言:javascript
复制
public string IntAsString( int i )
{
  return i.ToString();
}

在这里,我刚刚编写了一个函数,它接受int并返回字符串。我该如何使用它呢?

代码语言:javascript
复制
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来代替。

代码语言:javascript
复制
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的引用(这些对方法的引用称为delegates并使用它。(请记住,fnc读取整数并返回字符串)。

这个例子不是很吸引人,但你会看到很多聪明的东西都是基于函数、委托和extension methods的简单概念。

我见过的最好的入门读物之一是here。他有更多的真实例子。:)

票数 41
EN

Stack Overflow用户

发布于 2009-05-18 16:48:51

它是一个将一个int作为参数并返回string类型的值的委托。

下面是它的用法示例:

代码语言:javascript
复制
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();
    }
}
票数 29
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/878650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档