Вы просто хотите
public Task<bool> DoSomething<T>(T t) where T : IAnyInterface
, который определяет, что T
является типом, который должен реализовывать IAnyInterface
.
Вышеуказанное позволит вам передать экземпляр в качестве параметра ивывод T
:
DoSomething(new ObjectThatImplementsIAnyInterface());
Дополнительная информация об ограничениях типов: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/generics/constraints-on-type-parameters
На основе вашего комментария:
Не знаюхотите передать экземпляр, иначе я хочу создать экземпляр внутри метода
Похоже, вы можете захотеть ограничение new()
, которое позволяет создавать экземпляр внутри метода (Примечание: выпонадобится ctor без параметров):
public Task<bool> DoSomething<T>() where T : IAnyInterface, new()
{
// now you can do this:
IAnyInterface inst = new T();
}
Учитывая DoSomething<ObjectThatImplementsIAnyInterface>()
вызов.
Вы, конечно, можете использовать подход, при котором вы можете передать его или создать его
public Task<bool> DoSomething<T>(T t = null) where T : class, IAnyInterface, new()
{
// now you can do this:
IAnyInterface inst = t ?? new T();
}
Если вы хотите узнать фактический тип во время выполнения, это просто
var runtimeType = typeof(T);