具有动作和功能参数的歧义

问题描述 投票:17回答:3

此代码怎么可能

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)'

当动作的签名是]时>

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 (fileMananager.BackupItems,package);导致编译错误下列方法之间的调用不明确,或者...

c# delegates task-parallel-library ambiguity
3个回答
21
投票

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


0
投票

我遇到了同样的问题,解决方案是:


0
投票

当今对此的另一种可能的解释是:

© www.soinside.com 2019 - 2024. All rights reserved.