c# – 是否是委托类型的lambdas构造函数?
我发现当我使用lambdas作为被断言的方法的参数时,Rhino Mocks的AssertWasCalled失败.
测试: 代码内部系统测试: 这使得我认为lambdas是有效的代表类型的构造函数. 当我想到lambdas作为代表类型的构造函数时,我错过了什么重要吗? 解决方法
那么他们在“构造器”一词的任何正常用途中并不是真正的“构造者”.
它们是可以转换为委托类型或表达式树类型的表达式 – 后者对于进程外LINQ是至关重要的. 如果您真的在询问是否使用两个“等效”lambda表达式可以创建不相等的委托实例:是的,它是. IIRC,C#语言规范甚至呼吁,就是这样. 但是,多次使用相同的lambda表达式将不会始终创建不同的实例: using System; class Test { static void Main(string[] args) { Action[] actions = new Action[2]; for (int i = 0; i < 2; i++) { actions[i] = () => Console.WriteLine("Hello"); } Console.WriteLine(actions[0] == actions[1]); } } 在我的盒子上,实际打印True – actions [0]和action [1]具有完全相同的值 – 它们指的是同一个实例.的确,我们可以进一步: using System; class Test { static void Main(string[] args) { object x = CreateAction(); object y = CreateAction(); Console.WriteLine(x == y); } static Action CreateAction() { return () => Console.WriteLine("Hello"); } } 再次,这打印True.不能保证,但是在这里,编译器实际上创建了一个静态字段来缓存第一次需要的代理 – 因为它不捕获任何变量. 基本上这是一个你不应该依赖的编译器实现细节. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- PostgreSQL的安装以及使用
- ruby-on-rails – rails structure.sql和schema.
- c – 使用迭代器走路和解散std :: vector最干净的
- vue2.0 子组件改变props值,并向父组件传值的方法
- macos – 有时在NSPopover错误的位置,在El Capit
- ruby-on-rails – Ruby on Rails上的textarea上的
- 关于XML字符串和XML Document之间的转换
- c# – 从VBScript调用.NET COM对象
- 使用SQLite In Memory配置测试NHibernate时,如何
- ruby-on-rails – 配置session_store.rb来处理分