gpt4 book ai didi

c# - 为什么 C# 编译器不能从函数签名中推断泛型委托(delegate)?

转载 作者:太空狗 更新时间:2023-10-29 20:24:19 25 4
gpt4 key购买 nike

<分区>

我正在使用一个函数,该函数将两个函数作为参数,并返回一个新的组合函数:

public static Action<T> Compose<T>(Action<T> first, Action second)
{
return new Action<T>(arg =>
{
first(arg);
second();
});
}

我注意到如果我不指定 T 编译器会报错,当向它发送静态或成员函数(而不是实际的 Action<T> 对象)时:

static void Main(string[] args)
{
// compiler error here
var composed = Compose(Test, () => Console.WriteLine(" world"));
composed("hello");

Console.ReadLine();
}

public static void Test(string arg)
{
Console.Write(arg);
}

错误信息:

The arguments for method 'ConsoleTest.Program.Compose(System.Action, System.Action)' cannot be inferred from the usage. Try specifying the type arguments explicitly.

我的问题:为什么不能在这里推断类型参数? Test的签名在编译时是已知的,不是吗?真的有一些功能可以代替 Test 吗? , 这会导致其签名不明确吗?

脚注:我知道我可以简单地发送 new Action<string>(Test)而不是 TestCompose (如 this question 中所述)——我的问题是“为什么”,而不是“我该怎么做”。

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