在接口的通用方法中使用通用类型的参数

时间:2019-09-21 10:24:52

标签: c# generics interface

我的朋友们。我是泛型新手,但想使用泛型方法(FooAsync)创建接口(让它为IFooAsync),该接口获取另一个泛型类型(具有定义Process)的参数,但是我不想在其中包含此U类型方法定义。怎么做对?我的代码现在看起来像这样(我已将Object用作通用的Progress类型,但请确保它是一个糟糕的解决方案):

public interface IFooAsync
{
    System.Threading.Tasks.Task<List<T>> FooAsync<T>(
        // Some parameters, that my method gonna take.
        System.IProgress<Object> progress,
        System.Threading.CancellationToken cancellationToken) where T : new();
}

1 个答案:

答案 0 :(得分:1)

你可以做

using System;
using System.Threading;
using System.Threading.Tasks;

public interface IFooAsync<TReturn> where TReturn : new()
{
    Task<List<TReturn>> FooAsync<TProgress>(IProgress<TProgress> progress, 
                                            CancellationToken cancellationToken);
}

这意味着您不必在调用该方法时指定两个类型参数,因为编译器可以推断出它们。

例如

IFooAsync<string> myFoo = ... ;
IProgress<int> myProgress = ... ;

List<string> result = await myFoo.FooAsync(myProgress, CancellationToken.None);