Func (Of Tin, Tout) mit einem Lambda-Ausdruck mit ByRef-Argument gibt inkompatible Signatur Fehler

8

Warum das:

%Vor%

gibt den folgenden Fehler:

  

Die verschachtelte Funktion hat keine Signatur, die mit dem Delegate String kompatibel ist. '.

Währenddessen:

%Vor%

Nicht? (Der Unterschied ist ByRef / ByVal)

Außerdem, wie kann ich so etwas umsetzen?

    
Brian Mulcahy 09.03.2011, 00:35
quelle

2 Antworten

11

Sie erhalten diesen Fehler, weil der Delegattyp Funktion (ByVal z As Double) als String nicht mit Funktion (ByRef z As Double) als String kompatibel ist. Sie brauchen eine genaue Übereinstimmung.

Sie können auch nicht den Func (Of ...) generischen Delegaten mit ByRef-Parametern deklarieren ( ref oder out in C #) , egal, ob Sie anonyme Funktion verwenden oder nicht.

Aber Sie können den Typ delegieren und ihn dann auch mit Ihrer anonymen Funktion verwenden

%Vor%

oder Sie können die implizite Typisierung verwenden (wenn Option Infer aktiviert ist)

%Vor%     
Artyom Krivokrisenko 09.03.2011, 01:06
quelle
6

Auf MSDN wird erwähnt, dass die folgenden Regeln für den Variablenbereich in Lambda-Ausdrücken gelten:

  • Eine Variable, die erfasst wird, wird nicht durch Garbage gesammelt, bis der Delegat, der darauf verweist, den Gültigkeitsbereich verlässt.
  • Variablen, die innerhalb eines Lambda-Ausdrucks eingeführt werden, sind in der äußeren Methode nicht sichtbar.
  • Ein Lambda-Ausdruck kann den Parameter ref [ByRef in VB] oder out nicht direkt von einer einschließenden Methode erfassen.
  • Eine return-Anweisung in einem Lambda-Ausdruck bewirkt nicht, dass die umschließende Methode zurückgegeben wird.
  • Ein Lambda-Ausdruck kann keine goto-Anweisung, break-Anweisung oder continue-Anweisung enthalten, deren Ziel außerhalb des Körpers oder im Körper einer enthaltenen anonymen Funktion liegt.
Matt 09.03.2011 00:42
quelle

Tags und Links