gpt4 book ai didi

c# - 在 C# 中将方法隐式转换为 Func

转载 作者:太空宇宙 更新时间:2023-11-03 13:19:49 24 4
gpt4 key购买 nike

我有这个函数 printAll 打印 IEnumerable 的所有元素

IEnumerable<A> printAll<A> (IEnumerable<A> able) {
foreach (var a in able) {
print (a);
}
return able;
}

我还有一个函数 Fn.Compose,它组合定义为的函数

Func<A,C> Compose<A,B,C> ( Func<B,C> g, Func<A,B> f ) {
return x => g (f (x));
}

我使用 Compose 得到 f

Fun<int, IEnumerable<int>> f = Fn.Compose (printAll, g);

g 是类型

Func<int,IEnumerable<int>>

至少在编辑器中没有得到警告,但是当我编译时出现这个错误

No overload for method printAll' takes0' arguments

这很奇怪,因为我没有调用 printAll ,我只是将它作为参数传递。

编辑:如果我施法则有效

Compose (printAll as Func<IEnumerable<int>,IEnumerable<int>>, g);

但它应该可以正常工作。最糟糕的是,这有效

Compose (x => printAll(x), g);

最佳答案

不幸的是,随着所有泛型操作的进行,编译器无法解析参数类型。你必须明确

Func<int, IEnumerable<int>> f = Compose<int,IEnumerable<int>,IEnumerable<int>>(printAll, g);

我应该澄清一下。这取决于 Visual Studio 的版本或您使用的编译器。在 2012 年编译良好,但在 2008 年需要明确。不确定其他版本。

关于c# - 在 C# 中将方法隐式转换为 Func,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24746170/

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