Mi chiedevo se è possibile, poiché i miei 5 minuti di sperimentazione si sono rivelati infruttuosi.Funzione di identità generica da utilizzare con inferenza di tipo
speravo che sarebbe stato così facile come:
T Identity<T>(T t) { return t; }
Ma questo non riesce a compilare su metodi generici che prendono parametri Funz. Ad esempio OrderBy. Anche specificando i parametri di tipo (che è esattamente quello che voglio evitare!), Non riesce a compilare.
Poi ho provato qualcosa che pensavo avrebbe funzionato:
Func<T, R> MakeIdentity<T, R>()
{
return (T t) => (R)(object)t;
}
anche no go :((questa compila quando si applica parametri di tipo, ancora una volta, non quello che voglio)
Qualcuno ha avuto fortuna mettere tali una cosa
UPDATE:? per favore non dire: x => x, lo so, è ovvio che sto chiedendo per una funzione, non è un'espressione :)
UPDATE 2: Quando I ref per identità, intendo in senso funzionale, dove la funzione restituisce semplicemente lo stesso oggetto che hai passato ad esso. È probabilmente in ogni linguaggio funzionale che ho incontrato, ma quelli non usano la digitazione statica. Mi chiedo come fare questo (se possibile) con i generici. Solo per divertimento!
UPDATE 3: Ecco una 'soluzione' parziale in base alla seconda idea:
Expression<Func<T, T>> MakeIdentity<T>()
{
return t => t;
}
void Foo(string[] args)
{
var qargs = args.AsQueryable();
var q = qargs.OrderBy(MakeIdentity<string>());
...
}
Non credo che qualcosa di più di questo sarà possibile.
Che cosa stai cercando di fare? –
Stanco di scrivere x => x :) E mi sto solo chiedendo davvero. non ha scopo. – leppie
Con C# 6.0 'myList.OrderBy (Identity);' funzionerà. – Henrik