Io vorrei rendere più facile possibile l'uso del mio metodo senza dover specificare i tipi esplicitamente.
Per farlo mi sono creato la seguente struttura:
public interface IConvertible<T>
{
public T ConvertInstance();
}
public class User : IConvertible<UserDTO>
{
public string Name { get; set; }
public string Surname { get; set; }
public UserDTO ConvertInstance()
{
//manage to convert from user to userDTO
return dto;
}
}
public class UserDTO
{
public string Name { get; set; }
public string Surname { get; set; }
}
E infine ho un metodo in una classe separata che ha la seguente firma:
public async Task<List<Tdto>> ExecuteExpression<Tentity,Tdto>(Expression<Func<Tentity, bool>> expression, params Expression<Func<Tentity, object>>[] includes) where Tentity : class, IConvertible<Tdto> where Tdto : class
{
//manage to take from database object of type Tentity
List<Tdto> convertedItems = new();
foreach (var item in items)
{
var converted = item.ConvertInstance();
convertedItems.add(converted);
}
}
La mia domanda è la seguente:
Come posso fare in modo che quando chiamo il metodo ExecuteExpression io non debba specificare i tipi del metodo ma li capisca da solo?
Il tipo Tentity lo capisce già da solo in quanto viene passato all'interno della Expression<Func<Tentity, bool>> mi manca da far capire al compilatore la relazione tra Tentity e Tdto.
Qualcuno può darmi una mano?