Tengo un método genérico como esta (versión simplificada):tipo parcial inferencia
public static TResult PartialInference<T, TResult>(Func<T, TResult> action, object param)
{
return action((T)param);
}
En lo anterior, param
es de tipo object
a propósito. Esto es parte del requisito.
Cuando relleno en los tipos, puedo llamarlo así:
var test1 = PartialInference<string, bool>(
p => p.EndsWith("!"), "Hello world!"
);
Sin embargo, me gustaría utilizar la inferencia de tipos. Preferiblemente, me gustaría escribir esto:
var test2 = PartialInference<string>(
p => p.EndsWith("!"), "Hello world!"
);
Pero esto no se compila. Lo mejor que se me ocurrió es la siguiente:
var test3 = PartialInference(
(string p) => p.EndsWith("!"), "Hello world!"
);
La razón me gustaría tener esto como un parámetro de tipo y todavía tienen el tipo de retorno correctamente escrito se debe a mis llamadas reales sean algo como esto:
var list1 = ComponentProvider.Perform(
(ITruckSchedule_StaffRepository p) => p.GetAllForTruckSchedule(this)
)
que es muy feo y me encanta escribir como algo parecido a esto:
var list2 = ComponentProvider.Perform<ITruckSchedule_StaffRepository>(
p => p.GetAllForTruckSchedule(this)
)
. Inferencia tipo .NET es todo o nada, nunca parcial. – Dario
¿Alguna idea para una reescritura del método que aún así eliminaría la fea tipeación del parámetro 'p'? –
@Dario eso es una generalización excesiva. La inferencia de tipo es una característica C# y otros lenguajes .NET pueden manejarlo de manera diferente. – CodesInChaos