Использование параметра универсального типа в универсальном методе интерфейса - PullRequest
0 голосов
/ 21 сентября 2019

мои друзья.Я новичок в дженериках, но хочу создать интерфейс (пусть это будет IFooAsync) с универсальным методом (FooAsync), который получает параметр другого универсального типа (который имеет определение 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 Ответ

1 голос
/ 21 сентября 2019

Вы можете сделать

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...