Ich habe einige Unterabfragen vom Datentyp var. Diese arbeiten an einer Datentabelle. Ich würde diese gerne an eine andere Methode weitergeben, wie kann ich das machen? Ex:
%Vor%Nun möchte ich eine Methode definieren, um diese Unterabfragen1, Unterabfragen2 als Variablen zu übergeben. zB:
%Vor%Und führen Sie die Methode aus:
%Vor%Wenn ich versuche, var in der Methode bei der Definition zu verwenden, mag ich es nicht. Bitte hilf mir dabei. Danke.
Ihr Ergebnis ist eine Folge anonymer Objekte. var
Schlüsselwort sagt nur zum Compiler "Hey, führe Argumente für mich aus der Nutzung her". Das Ableiten von Typen aus der Verwendung wird als Typinferenz bezeichnet. Sie können dem C # -Compiler jedoch nicht sagen, dass er Methodenartenargumente in der Methodendeklaration ableiten soll. Außerdem können Sie im Fall von anonymous objects
ihren Namen nicht angeben. Du solltest sie also nicht außerhalb und innerhalb anderer Methoden weitergeben. Sie können sie in dynamic
umwandeln und dann über CallSite
auf ihre Member zugreifen (der Compiler erstellt sie, wenn Sie auf ein Mitglied eines dynamischen Objekts wie myDynamic.Name
zugreifen) oder Sie können anonymes Objekt in object
umwandeln und über Reflektion auf seine Eigenschaften zugreifen , aber alle diese Methoden sind nicht c # idiomatisch und vermissen wirklich den Punkt anonymer Objekte.
Anstatt anonyme Objekte in der Abfrage zu erstellen
Erstellen Sie einen benutzerdefinierten Typ
%Vor% Und instantiieren Sie es als Ergebnis der Abfrage wie im nächsten Beispiel: (Sie können var
Schlüsselwort anstelle von IEnumerable<Result>
ersetzen - kompilierter Code wird gleich sein)
Die Methode sieht aus wie
%Vor% Dann rufst du updategrid
like einfach updategrid(subquery1)
an und du wirst die Schönheit der statisch getippten Sequenz deiner Elemente im Körper von updategrid
Var ist kein Datentyp. Es ist eine kurze Hand für "herauszufinden, welcher Datentyp das ist, wenn Sie die App kompilieren". Sie können herausfinden, was der Datentyp tatsächlich ist und diesen für Ihren Parameter verwenden, oder Sie könnten eine generische Funktion erstellen, die mit jedem Datentyp arbeitet.
Ist kein gültiges C #.
var
ist syntaktischer Zucker - die Variable hat einen Typ, aber Sie müssen ihn nicht deklarieren, wenn der Compiler statisch bestimmen kann, was er sein soll.
Mit einem Parameter hat der Compiler nicht genügend Informationen, um den Typ zu bestimmen.
Ebenso können Sie keine Variable mit var
ohne Zuweisung deklarieren:
Sie müssen sicherstellen, dass die Arten von subquery1
, subquery2
und die Parameter von updategrid
alle gleich sind.
Sie können eine Methode mit var
Argumenttyp deklarieren. Aber Sie können so schreiben:
var
bedeutet take type from right-hand side and declare variable with this type from left-hand side
und dies wird in der Kompilierzeit verarbeitet. Wie Sie sehen können, macht die Verwendung von var
als Methode keinen Sinn.
Verwenden Sie Object
oder dynamic
var
- & gt; Statischer Typ, der von der rechten Seite des Ausdrucks bestimmt wird. Kann nicht als Parameter / Rückgabetyp verwendet werden
object
- & gt; Basisklasse für alle .NET-Typen.
dynamic
- & gt; Der Typ wird zur Laufzeit aufgelöst. Daher werden keine Kompilierzeitüberprüfungen durchgeführt, und intellisense ist nicht verfügbar. Es hat auch Leistungskosten.
In C # gibt es keinen 'var' -Typ. 'var' ist nur ein Schlüsselwort, das den Compiler anweist, 'was als nächstes kommt, um den Typ herauszufinden' zu analysieren. Dies geschieht während der Kompilierung, nicht während der Laufzeit.
Die Variablen, von denen Sie sprechen, werden tatsächlich als anonyme Typen eingegeben, die der Compiler beim Kompilieren automatisch generiert. Solche Typen können, da sie keinen Namen haben, nicht dazu verwendet werden, Parametertypen oder Rückgabewerte zu deklarieren.
Sie sollten entweder explizite Klassen für diese Daten erstellen oder in .Net4 oder höher das Tuple & lt; & gt; generischer Typ.
Sie könnten wahrscheinlich eine dynamische Referenz verwenden, aber dafür würde ich nicht gehen.
Stattdessen ist es besser, tatsächliche Klassen für diese Datentypen zu erstellen und sie stattdessen an die Methoden zu übergeben.
Zum Beispiel:
%Vor%Was Sie so erstellen können:
%Vor%und haben eine Funktion wie folgt:
%Vor%Tags und Links c#