Casting C # out Parameter?
Ist es möglich auszutreiben param Argumente in C#? Ich habe:
Dictionary<string,object> dict; //but I know all values are strings
string key, value;
Grob gesagt (und wenn ich nicht statische Typisierung), die ich tun will:
dict.TryGetValue(key, out value);
aber dies wird offensichtlich nicht kompilieren, da es "keine Konvertierung von 'string' zu 'Objekt'".
Den workaround, den ich verwende, ist:
object valueAsObject;
dict.TryGetValue(key, out valueAsObject);
value = (string) valueAsObject;
aber das scheint mir eher umständlich.
Gibt es irgendeine Art von Sprache-Funktion, lassen Sie mich werfen ein out-Parameter beim Aufruf der Methode, so tut es dies switcheroo für mich? Ich kann nicht herausfinden, jede syntax, die helfen werden, und ich kann nicht scheinen, nichts zu finden mit google.
InformationsquelleAutor der Frage Ken | 2009-08-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich weiß nicht, ob es eine gute Idee, aber Sie könnte hinzufügen eine generische Erweiterungsmethode:
InformationsquelleAutor der Antwort Marc Gravell
Wenn Sie wissen, alle Werte sind Zeichenketten verwenden
Dictionary<string, string>
statt. Der out-parameter Typ wird durch den Typ des zweiten generischen Typ-parameter. Da deins ist derzeit Objekt es wird ein Objekt zurückgeben, beim abrufen aus dem Wörterbuch. Wenn Sie es ändern, um die Zeichenfolge ist, wird die Rückgabe von strings.InformationsquelleAutor der Antwort John Sheehan
Nein, es gibt keinen Weg vorbei. Der out-parameter muss eine variable, die exakt gleich sind.
Verwendung einer string-Referenz ist nicht sicher, wie das Wörterbuch enthalten Sie andere Dinge als strings. Allerdings, wenn Sie hatte ein dictionary von strings und versucht, eine object-variable verwenden, die in die TryGetValue-Aufruf, dass wird nicht funktionieren, auch wenn das sicher wäre. Typ der variable muss genau übereinstimmen.
InformationsquelleAutor der Antwort Guffa
Ich verwendet, Marc-Erweiterung Methode aber hinzu, ein bisschen zu.
Mein problem mit dem original war, dass in einigen Fällen, in meinem Wörterbuch enthalten würde, einen int64 in der Erwägung, dass würde ich erwarten, dass ein int 32. In anderen Fällen würde das Wörterbuch enthält eine Zeichenfolge (zum Beispiel "42"), während ich möchte, um es als int.
Gibt es keine Möglichkeit zu behandeln Umwandlung in Marc ' s Methode, so dass ich Hinzugefügt wurde die Fähigkeit, eine Stellvertretung, die zu einer conversion-Methode:
Die Sie nennen können, wie dieser:
InformationsquelleAutor der Antwort buddybubble
Nein, das können Sie nicht. Der code innerhalb der Methode ist eine direkte änderung der Variablen übergeben, nicht übergeben, wird eine Kopie des Inhalts der variable.
InformationsquelleAutor der Antwort AnthonyWJones