Un linguaggio di programmazione orientato agli oggetti e indipendente dai tipi che ha le sue radici nella famiglia di linguaggi C e include il supporto per la programmazione orientata ai componenti.
Forse mi sono spiegato male:
io vorrei che quando chiamo il metodo in questione io possa scrivere direttamente
var result = await _repository.ExecuteExpression(expression, ...);
Invece attualmente io devo specificare anche i tipi del metodo nel seguente modo:
var result = await _repository.ExecuteExpression<User,UserDTO>(expression, ...);
Il primo tipo il compilatore lo deduce automaticamente in quanto è contenuto nel tipo dell'expression che è di tipo Expression<Func<User, bool>> ma come faccio invece per il secondo tipo ossia UserDTO.
Loro in teoria sono legati in quanto la classe User implementa l'interfaccia IConvertible<UserDTO>.