Вызов метода с аргументом типа без явного определения аргумента типа
Есть метод с такой структурой:
public async Task<Result<T>> Send<T>() where T : class {}
Хотелось бы в некоторых ситуациях вызывать так:
Send();
При попытке получаю ошибку "Аргументы типа для метода не могут определяться по использованию. Попытайтесь явно определить аргументы типа" Ошибка мне понятна. Подскажите, есть ли возможность её преодолеть, не определяя явно аргумент типа?
Ответы (1 шт):
Ваш метод
public void Send<T>()
{
}
Допишите ещё метод
public void Send()
{
}
И это распространённое явление. Пример:
System.Array.Sort(System.Array array);
System.Array.Sort<T>(T[] array);
System.Array.Sort<T0, T1>(T0[] array0, T1[] array1);
Всё это можно решить (в некотором смысле) используя "врапперы". "Враппер" в данном случае трактуется - широко. Это обёртка. Это может быть класс оборачивающий класс. Или набор методов оборачивающих методы, и комбинации всего этого.
В вашем случае имеющийся метод можно "обернуть" через другой метод.
псевдокод
public async Task<Result<T>> Send<T>() where T : class // метод Send<T>() есть
{
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public async Task<Result<T>> Send() where T : class // допишите нужный Send()
{
return Send<T>();
}
Смысл здесь прост. Вам нужны методы? Так допишите нужные вам методы.