Ich fragte mich, ob es möglich ist, wie meine 5 Minuten des Experimentierens fruchtlos erwiesen.Generic Identity-Funktion zur Verwendung mit Typ Inferenz
Ich hoffte, dass es so einfach sein würde, wie:
T Identity<T>(T t) { return t; }
Aber diese auf generische Methoden unter Func-Parameter zu kompilieren schlägt fehl. ZB OrderBy. Selbst wenn ich Typparameter spezifiziere (was genau das ist, was ich vermeiden will!), Kann es nicht kompiliert werden.
Als nächstes habe ich versucht, etwas, was ich dachte funktionieren würde:
Func<T, R> MakeIdentity<T, R>()
{
return (T t) => (R)(object)t;
}
Auch no go :((dies kompiliert, wenn Typ-Parameter Anwendung wieder, nicht, was ich will)
Hat jemand hatte Glück so machen eine Sache
UPDATE: bitte nicht sagen: x => x, ich weiß, dass es offensichtlich ist, ich für eine Funktion bin zu fragen, nicht Ausdruck :)
UPDATE 2: Wenn I ref Zur Identität, ich meine im funktionalen Sinne, wo die Funktion einfach das gleiche Objekt zurückgibt, das Sie ihr übergeben haben. Es ist wahrscheinlich in jeder funktionalen Sprache, die ich gefunden habe, aber diese verwenden nicht statische Typisierung. Ich frage mich, wie das (wenn möglich) mit Generika zu tun ist. Nur zum Spaß!
UPDATE 3: Hier ist eine teilweise ‚Lösung‘ auf der Grundlage der zweiten Idee:
Expression<Func<T, T>> MakeIdentity<T>()
{
return t => t;
}
void Foo(string[] args)
{
var qargs = args.AsQueryable();
var q = qargs.OrderBy(MakeIdentity<string>());
...
}
Ich denke nicht, etwas mehr als dies möglich sein wird.
Was versuchen Sie zu tun? –
Müde vom Schreiben x => x :) Und ich frage mich wirklich. es dient keinem Zweck. – leppie
Mit C# 6.0 'myList.OrderBy (Identity);' wird funktionieren. – Henrik