gpt4 book ai didi

c# - Action 和 Func 参数不明确

转载 作者:可可西里 更新时间:2023-11-01 03:00:13 25 4
gpt4 key购买 nike

这段代码怎么可能

TaskManager.RunSynchronously<MyObject>(fileMananager.BackupItems, package);

导致编译错误

The call is ambiguous between the following methods or properties:
'TaskManager.RunSynchronously<MyObject>(System.Action<MyObject>, MyObject)' and
'TaskManager.RunSynchronously<MyObject>(System.Func<MyObject, bool>, MyObject)'

当 Action 的签名是

public void BackupItems(MyObject package)

和“模棱两可”的方法是

static class TaskManager
{
public static void RunSynchronously<TInput>(Action<TInput> task, TInput param)
{
Task.Factory.StartNew(() => task(param));
}

public static bool RunSynchronously<TInput>(Func<TInput, bool> task, TInput param)
{
return Task.Factory.StartNew(() => task(param)).Result;
}
}

在我看来,这些方法之间存在很大差异。我在这里缺少什么?

编辑:

除了已接受的答案外,我刚刚在类似问题中遇到了一个解决方案。这是 link .

最佳答案

原因是方法的返回类型不是其签名的一部分。因此,在解析正确的重载时,编译器只查看方法的参数。

最简单的解决方案就是不使用隐式方法组转换。以下所有编译:

TaskManager.RunSynchronously<MyObject>(
x => fileMananager.BackupItems(x), package);

TaskManager.RunSynchronously<MyObject>(
(Action<MyObject>)fileMananager.BackupItems, package);

TaskManager.RunSynchronously<MyObject>(
new Action<MyObject>(fileMananager.BackupItems), package);

第一个是其中最优雅的,但它也是唯一一个对运行时性能有轻微影响的,因为有一个额外的重定向。但是,这种影响很小,您实际上不应该在意。

关于c# - Action 和 Func 参数不明确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18715979/

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