C# 使用Func重写方法<;T、 M>;和行动<;T>;在C中#

C# 使用Func重写方法<;T、 M>;和行动<;T>;在C中#,c#,methods,overriding,C#,Methods,Overriding,我有以下两种有效的方法: public T InvokeFunc<T>(Func<ServiceClient,T> operation) { return operation(client); } public void InvokeAction(Action<ServiceClient> operation) { operation(client); } 这是可能的还是两种方

我有以下两种有效的方法:

    public T InvokeFunc<T>(Func<ServiceClient,T> operation)
    {
        return operation(client);
    }

    public void InvokeAction(Action<ServiceClient> operation)
    {
        operation(client);
    }

这是可能的还是两种方法都必须使用不同的名称?

不幸的是,这是不可能的

规范规定,重载的C#方法必须具有不同的参数,如下面的链接所示

毕竟,在编译之前,他如何知道您使用的是哪种方法是有道理的?这可能会在运行时生成异常


希望这有帮助

很简单,这是不可能的。你为什么拒绝我?你是正确的,但在我的情况下,参数是不同类型的。一个是Func类型,另一个是Action类型。也许这些事实上并没有被认为是不同的,因为它们的呼叫特征相似。我将等待更多的答案,以获得其他一些意见。你的问题比我想象的要深刻。我认为现在发生的是,这两个方法都作为委托的参数给出。在这种情况下,编译器之间不能存在差异。由于它们的参数Signature不相等,两者都表示delegate@Joao. 菲尼克斯投了反对票。有人被告知他们所寻求的是不可能的,并且被提供支持性证据/论据不应该仅仅因为他们没有得到他们想要的而导致否决票。
    public void InvokeOperation(Action<RimsoftHRServiceClient> operation)
    {
        operation(client);
    }

    public T InvokeOperation<T>(Func<RimsoftHRServiceClient,T> operation)
    {
        operation(client);
    }
 List<City> cities = InvokeOperation(x => x.GetAllCities()); //GetAllCities returns List<City>
InvokeOperation(x=>x.TestCommunication()); //TestCommunication returns void