栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么不能将匿名方法分配给var?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么不能将匿名方法分配给var?

其他人已经指出,您 可能
意味着无限多种可能的委托类型。什么特别之处

Func
,它不愧为默认的替代
Predicate
Action
或任何其他可能性?而且,对于lambda而言,为什么很明显的目的是选择委托形式而不是表达式树形式?

但是我们可以说这

Func
很特殊,并且lambda或匿名方法的推断类型是某物的Func。我们仍然有各种各样的问题。在以下情况下,您想推断出什么类型?

var x1 = (ref int y)=>123;

没有

Func<T>
类型可以引用任何东西。

var x2 = y=>123;

尽管我们知道返回值,但我们不知道形式参数的类型。(还是我们?return int?long?short?byte?)

var x3 = (int y)=>null;

我们不知道返回类型,但是它不能为空。返回类型可以是任何引用类型或任何可为空的值类型。

var x4 = (int y)=>{ throw new Exception(); }

同样,我们不知道返回类型,这一次它 可能 是无效的。

var x5 = (int y)=> q += y;

它是否打算作为返回void的语句lambda或返回分配给q的值的东西?两者都是合法的;我们应该选择哪个?

现在,您可能会说,嗯,就是不支持任何这些功能。仅支持可以计算出类型的“正常”情况。那没有帮助。这如何使我的生活更轻松?如果该功能有时有效并且有时会失败,那么我仍然必须编写代码以
检测 所有这些失败情况并为每种情况提供 有意义的错误消息 。我们仍然必须指定所有行为,将其记录下来,为其编写测试,等等。这是一项
非常昂贵的功能
,可以节省用户六次击键的时间。与花大量时间编写测试用例相比,我们有一种更好的方法可以为语言增添价值,因为该功能不能在一半时间内起作用,并且在起作用的情况下几乎没有任何好处。

实际上有用的情况是:

var xAnon = (int y)=>new { Y = y };

因为那东西没有“可说”的类型。但是我们一直都有这个问题,我们只是使用方法类型推断来推断类型:

Func<A, R> WorkItOut<A, R>(Func<A, R> f) { return f; }...var xAnon = WorkItOut((int y)=>new { Y = y });

现在,方法类型推断可以算出func类型是什么。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/483982.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号