在 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
}(),
};