Вывод параметра типа generi c из функции обратного вызова - PullRequest
2 голосов
/ 30 марта 2020

У меня есть фрагмент кода, который в настоящее время выглядит следующим образом:

Подпись метода Subscribe:

void Subscribe<T, TResult>(Func<T, TResult> action);

class Service { 
   int methodThatRequiresIntAndReturnsInt(int i) => i * 2;
}

На мой взгляд, должна быть возможность экстраполировать, какие типы для T и TReturn при попытке использовать метод подписки, однако компилятор говорит мне, что типы не могут быть выведены из использования, что означает, что я в итоге пишу этот код:

Queue.Subscribe<int, int>(Service.methodThatRequiresIntAndReturnsInt);

Мой вопрос: возможно ли это, и если да, как должна выглядеть сигнатура / использование метода, чтобы его можно было использовать без подсказок типа, например:

Queue.Subscribe(input => input * 2);

Текущая реализация выглядит так:

_commandSubscription.Subscribe<CreateUpdateCommand, bool>(Resolve<UpdateService>().CreateUpdate);
_commandSubscription.Subscribe<AddCommentCommand>(Resolve<UpdateService>().AddComment);

реализации для методов обслуживания следующие:

public class UpdateService {

    public void AddComment(AddCommentCommand command) {
         // DO STUFF
    }

    public bool CreateUpdate(CreateUpdateCommand command) {
        // Do stuff 
        return true;
    }

}

1 Ответ

1 голос
/ 30 марта 2020

Вы можете сделать следующее:

Queue.Subscribe((int i) => Service.methodThatRequiresIntAndReturnsInt(i));

На практике подписанная функция работает эквивалентно, и вы избегаете явного ввода всех обобщенных c аргументов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...