首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >困惑于Func、Delegates和匿名类型

困惑于Func、Delegates和匿名类型
EN

Stack Overflow用户
提问于 2014-01-02 05:22:03
回答 4查看 603关注 0票数 2

从一本书中阅读这行代码示例:

代码语言:javascript
复制
Func<string,int> returnLength;
returnLength = delegate (string text) { return text.Length; };

Console.WriteLine(returnLength("Hello"));

上面写着

Func<string,double,int>等效于表单public delegate int SomeDelegate(string arg1, double arg2)的委托类型。

那么Func是代表?那么,我们在代码示例中再次定义的委托是什么?我们从Func中定义一个与delegate类似的变量,然后再将它赋值给另一个delegate?我非常困惑,无法理解这个概念。:(

有人能解释一下吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-01-02 05:29:37

所以Func 是?

是的,它的定义如下:

代码语言:javascript
复制
public delegate TResult Func<in T, out TResult>(T arg)

被描述为:

封装具有一个参数并返回由TResult参数指定的类型的值的方法。

有关更多信息,请阅读漏斗代表

,那么我们在代码示例中再次定义的委托是什么?

这是我们创建的匿名方法,用于将其赋值给Func-typed变量。您也可以使用命名方法或lambda表达,只要输入和返回类型与Func泛型参数匹配。

我们从Func中定义了一个与委托类似的变量,然后再将它分配给另一个委托?

不,我们创建一个变量类型为 Func<string, int>,然后创建一个与该类型匹配的委托,并将其分配给该变量。

来自MSDN的其他来源:

  • 匿名函数(C#编程指南)
  • 匿名方法(C#编程指南)
  • 命名方法与匿名方法的委托(C#编程指南)
  • Lambda表达式(C#编程指南)
票数 4
EN

Stack Overflow用户

发布于 2014-01-02 05:31:02

你只需要写同样的代码

代码语言:javascript
复制
Func<string,int> returnLength = (s) => {return s.Length;}

将委托分配给Func就像将一个变量赋值给另一个..。

票数 1
EN

Stack Overflow用户

发布于 2014-01-02 05:31:16

您的代码也可以这样表示:

代码语言:javascript
复制
Func<string,int> returnLength = delegate (string text) { return text.Length; };

Console.WriteLine(returnLength("Hello"));

函数是代表。

  1. Func<string, int>是声明,
  2. delegate (string text) { return text.Length; }是您要分配的函数。
    1. 这个委托(函数)接受一个字符串(string text)并返回一个整数(return text.Length;)。

这将返回5,因为“Hello5”的text.Length是5,而不是在本例中创建两个委托,而是分配一个。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20876831

复制
相关文章

相似问题

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