gpt4 book ai didi

c# - 自调用匿名函数

转载 作者:IT王子 更新时间:2023-10-29 04:49:01 27 4
gpt4 key购买 nike

在 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);

然而,每个版本都存在错误:

Method name expected

是否不支持自调用匿名方法(由于明确禁止或类型推断的不可能性),或者我的尝试是否有错误?

我大胆猜测,因为没有方法声明 ( 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
}(),
};

最佳答案

var x = ((Func<int, int>)(y => y * 2))(10);

问题是,当编译器看到 y => y * 2 时,它默认将其分类为 Expression 而不是 Func , 除非有一些上下文信息让它知道它应该是一个 Func。通过将其转换为 Func,我们为其提供了所需的上下文。

关于c# - 自调用匿名函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15278967/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com