2016-09-20 4 views
-4

Der Zweck des folgenden Codes besteht darin, mithilfe der List.Find() - Methode einen bestimmten Wert in einer generischen Liste zu finden. Ich füge einen Code unten ein:Suche nach einem bestimmten Wert in einer generischen Liste

Meine Abfrage ist warum Liste statisch ist, was ist der Zweck der Verwendung von statischen über da.

Eine andere Frage ist, warum ein Delegat dort innerhalb der Methode find verwendet wird.

Currency result = FindItClass.Find(delegate(Currency cur) { return cur.Code == searchFor; }); 
+3

* Warum 'list' ist statisch * Das ist eine Frage an den Autor dieses Programms darauf sein sollte?. Das '' Delegate'' ist deshalb so, weil 'Find' ein' Prädikat 'erwartet, wobei' T' der Typ Ihrer Liste ist, so dass Sie eine [* anonyme Methode *] (https://msdn.microsoft.dll) zur Verfügung stellen können. com/de-de/library/0yw3tz5k.aspx) dazu. –

+0

Google 'statische', ich bin sicher, du wirst eine Antwort finden. Das Schlüsselwort 'delegate' ist nicht mehr notwendig. Sie können schreiben: 'FindItClass.Find (cur => cur.Code == searchFor);' –

+0

Was denken Sie darüber, warum ein Delegat für '.Find' verwendet wurde? Hast du überlegt, was die Alternativen sind? –

Antwort

1

Die Liste ist statisch, weil es in einer kleinen Konsole App ist. Da Main statisch ist, kann es nur auf statische Variablen in der Klasse "Program" zugreifen, ohne eine neue Instanz von "Program" zu erstellen.

Das Schlüsselwort static gibt an, dass es im gesamten Programm eine Instanz dieser Variablen geben wird. Im Allgemeinen sollten Entwickler standardmäßig keine statischen Variablen verwenden, es sei denn, sie sind explizit sicher, dass sie eine einzelne Instanz der Variablen haben möchten.

Wie die Kommentare angeben, ist die Verwendung des Schlüsselwortes delegate jetzt optional, wenn Find aufgerufen wird. Der Zweck des delegate-Arguments besteht darin, eine Funktion zu übergeben, die für jedes Element in der Liste ausgeführt wird, um die Elemente zu finden, die true zurückgeben.

In modernen C#, können Sie diese Zeile schreiben könnte wie folgt:

Currency result = FindItClass.Find(cur => cur.Code == searchFor); 
Verwandte Themen