Laden...

Property mit ref-Parameter an Methode übergeben

Erstellt von Runshak vor 8 Jahren Letzter Beitrag vor 8 Jahren 3.111 Views
R
Runshak Themenstarter:in
71 Beiträge seit 2014
vor 8 Jahren
Property mit ref-Parameter an Methode übergeben

hallo

ich bin über die Suche auf ein Thema gestoßen, welches mir eine Antwort gibt, zu dem Problem das ich habe...

Fehlermeldung:
error CS0206: Eine Eigenschaft, ein Indexer oder ein dynamischer Memberzugriff kann nicht als out- oder ref-Parameter übergeben werden.

und herbivore hat dazu folgendes geschrieben...

Wenn man eine Property an eine Methode übergeben will, die einen ref-Parameter erwartet, müsste man also den Wert der Property in einer Variablen speichern, diese per ref übergeben und den geänderten Wert anschließend in die Property zurückschreiben.

Meine Frage...wie setze ich das denn um?

16.807 Beiträge seit 2008
vor 8 Jahren

MSDN: Compilerfehler CS0206 beantwortet die Frage nicht?

2.078 Beiträge seit 2012
vor 8 Jahren
var propertyCache = Property;
MyMethod(ref propertyCache);
Property = propertyCache;

Anders geht's nicht und das meinte vermutlich auch herbivore.

In den meisten Fällen braucht man ref aber gar nicht, oder die Methode tut mehr als eine Aufgabe.
Bisher habe ich glaube ich wirklich nur einen Anwendungsfall gesehen, wo es tatsächlich nötig ist und das sind die verschiedenen TryParse-Methoden bei den primitivaten Datentypen, bzw. wenn man das in einem eigenen Kontext machen will.
Ich würde mir daher überlegen, ob Du das wirklich brauchst. Wenn ja, dann kommst Du nicht um den oben gezeigten Umweg herum.

R
Runshak Themenstarter:in
71 Beiträge seit 2014
vor 8 Jahren

Ich hab ne C++ Dll eingebunden...und eine der Methoden besitzt 7 Parameter vom Typ String und Long...umgewandelt in String und Int32...aber sie besitzt halt auch noch einen Long* parameter...und das muss ich mit ref machen damit es funktioniert...jedenfalls meinte das der Kollege, der die DLL zusammengebastelt hat...

werde das von @palladin007 mal versuchen...danke 😃

16.807 Beiträge seit 2008
vor 8 Jahren

Naja, dass Du hier mit C++ arbeitest hättest ruhig auch im Eingangsthread erwähnen können (Stichwort PInvoke).
Da kommt es halt drauf an, wie das genau deklariert ist.
Das kann jetzt nen Char-Pointer sein, nen StringBuilder oder direkt ein String.

Dazu sollte man den Header kennen...

R
Runshak Themenstarter:in
71 Beiträge seit 2014
vor 8 Jahren

wusste nicht dass das ne rolle spielt...aber das was Palladin007 vorgeschlagen hat funktioniert