Ich habe eine generische Methode wie diese (vereinfachte Version):Teil Typinferenz
public static TResult PartialInference<T, TResult>(Func<T, TResult> action, object param)
{
return action((T)param);
}
In dem obigen ist param
vom Typ object
absichtlich. Dies ist Teil der Anforderung.
Wenn ich in der Art füllen, kann ich es so nennen:
var test1 = PartialInference<string, bool>(
p => p.EndsWith("!"), "Hello world!"
);
aber ich möchte Typinferenz verwenden. Vorzugsweise möchte ich folgendes schreiben:
var test2 = PartialInference<string>(
p => p.EndsWith("!"), "Hello world!"
);
Aber das kompiliert nicht. Das Beste, was ich kam mit, ist dies:
var test3 = PartialInference(
(string p) => p.EndsWith("!"), "Hello world!"
);
Der Grund Ich mag würde dies als Typ-Parameter haben, und haben immer noch die richtig eingegeben Rückgabetyp ist, weil meine tatsächlichen Anrufe wie folgt aussehen:
var list1 = ComponentProvider.Perform(
(ITruckSchedule_StaffRepository p) => p.GetAllForTruckSchedule(this)
)
die sehr hässlich ist, und ich würde so etwas zu schreiben liebe:
var list2 = ComponentProvider.Perform<ITruckSchedule_StaffRepository>(
p => p.GetAllForTruckSchedule(this)
)
.NET-Typ-Inferenz ist alles oder nichts - niemals partiell. – Dario
Irgendwelche Ideen für eine Neuschreibung der Methode, die noch die hässliche Typisierung des 'p' Parameters loswerden würde? –
@Dario das ist eine Über-Generalisierung. Typinferenz ist ein C# -Feature und andere .net-Sprachen können es anders behandeln. – CodesInChaos