在 JavaScript 中,自调用函数并不少见:
var i = (function(x) {
return x;
})(42);
// i == 42
虽然我当然不会比较这些语言,但我认为这样的结构可以翻译成 C#,并提供了支持的语言版本:
var i = (delegate(int x) {
return x;
})(42);
或者:
var i = ((x) => {
return x;
})(42);
甚至:
var i = (x => x)(42);
但是,每个版本都有错误:
预期方法名称
是否不支持自调用匿名方法(由于显式禁止或类型推断的不可能性),还是我的尝试有错误?
我冒昧地猜测,因为没有Func<T,T>
可以推断类型的方法声明( .
勘误表
在这个问题被淹没之前:
var i = new Func<int, int>(x => x)(42);
我应该说我希望利用类型推断,但我认为由于过于隐含,这可能是不可能的。
所以,稍微澄清一下这个问题;我们知道我们可以var i = new Func<int, int>(x => x)(42);
,但无需创建实例或强制转换为Func
,这可能吗?
用例
对于那些好奇(或关心)的人来说,用例是这样的:
var o = new {
PropertyA = () => {
// value computation
}(),
PropertyB = () => {
// value computation
}(),
};