Ich erstelle eine anonyme Methode und übertrage sie in eine Aktion, die später aufgerufen wird. Ich möchte einige numerische Daten (int
) in meine anonyme Methode übergeben. Um die Daten nach Wert zu übergeben, muss ich Kopien erstellen? Oder werden die Daten nach Wert weitergegeben?Erhalten anonyme Methoden, die an Aktionen übergeben werden, Daten nach Wert oder Verweis?
Hier ist, was ich denke, die Umsetzung aussehen würde, wenn ich Kopien erstellen habe:
private void CreateAction()
{
int bus = 4;
CustomObject[] data = new object[16];
int length = 1500;
this.doWorkLater = new Action(() =>
{
var busCopy = bus;
var dataCopy = data;
var lengthCopy = length;
this.WorkMethod(busCopy, dataCopy, lengthCopy);
});
}
Ist die (der obige Code) notwendig, um length
und bus
von Wert zu erhalten?
In diesem Fall wird CustomObject[] data
(einige Klasse habe ich erstellt) als Referenz oder Wert übergeben?
Variablen werden erfasst, keine Werte. Da diese Variablen für die Methode lokal sind, müssen Sie sie nicht kopieren, da nichts anderes sie modifizieren kann. – Lee
Ein guter Hinweis auf diese Notiz ist [Eric Lippert - Schließen über die Schleife Variable als schädlich angesehen] (https://blogs.msdn.microsoft.com/ericlippert/2009/11/12/closing-over-the-loop-variable - als schädlich angesehen/ –