Ich habe die folgende Methode:Wie erhält der C# -Compiler generische Typen?
public TResult Get<TGenericType, TResult>()
where TGenericType : SomeGenericType<TResult>
where TResult : IConvertible {
//...code that uses TGenericType...
//...code that sets someValue...
return (TResult) someValue;
}
Gerade jetzt, ein Benutzer dieses Verfahrens hat es wie folgt zu verwenden:
//Notice the duplicate int type specification
int number = Get<SomeGenericType<int>, int>();
Warum muss ich TResult im Verfahren defintion angeben? Der Compiler kennt TResult bereits, da ich es in TGenericType angegeben habe. Im Idealfall (wenn die C# Compiler ein wenig schlauer war), würde meine Methode wie folgt aussehen:
public TResult Get<TGenericType>()
where TGenericType : SomeGenericType<TResult>
where TResult : IConvertible {
//...code that uses TGenericType...
//...code that sets someValue...
return (TResult) someValue;
}
So könnte der Benutzer einfach nur es wie folgt verwendet werden:
//Much cleaner
int number = Get<SomeGenericType<int>>();
Gibt es eine Möglichkeit zu tun Was ich machen will; was ich vorhabe zu tun?
Ich denke, einige Qualifier wie * dumm * aus Frage Beschreibung entfernen wird helfen. – EFraim
Es ist der Compiler, der dumm ist, oder? ;) Ich entfernte den fremden Kommentar. Das ist eigentlich eine vernünftige Frage ohne sie. –
Da Sie darauf geantwortet haben, dass es nicht möglich ist, nur einige der Typparameter zu verwenden, sollten Sie Ihre Frage vielleicht neu formulieren, was Sie erreichen möchten. So wie es aussieht, lautet Ihre Frage "Wie kann ich den C# -Compiler dazu bringen, Code zu kompilieren, der gegen die Definition der C# -Sprache verstößt?" Als solche sollte es als "keine echte Frage" geschlossen werden. –