Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

Parameter xyz cannot be used inside lambda expression when using ref or out modifier.
Stefan8887878
myCSharp.de - Member



Dabei seit:
Beiträge: 2

Themenstarter:

Parameter xyz cannot be used inside lambda expression when using ref or out modifier.

beantworten | zitieren | melden

Hallo Leute

Ich definiere in einer Funktion mit ref prametern eine Async-Funktion mit einem einem Lambda-Ausdruck. Dann erhalte ich die Meldung während dem compilieren:
Fehler
Parameter dscontent cannot be used inside lambda expression when using ref or out modifier.
Wie kann ich das Problem beheben leider kann ich keine sync funktion aufrufen, da das ganze async sein muss.

Danke im Voraus


Das heisst


static void GeneralFunktion(ref dataset dscontent)
{
    webclient.downloadfileasync("pfad1","pfad2");
    webclient.downloadfilecompleted+=(sender, e)=>
    {
        dscontent.readxml(pfad2); // hier das problem: er meldet mir während dem   Compilieren: Parameter dscontent cannot be used inside lambda expression when using ref or out modifier
    }
}
private Nachricht | Beiträge des Benutzers
m0rius
myCSharp.de - Member

Avatar #avatar-3125.png


Dabei seit:
Beiträge: 1043

beantworten | zitieren | melden

Hallo Stefan8887878,

herzlich Willkommen auf myCSharp.

Gleich vorweg, dein Code ist leider Kraut und Rüben:
  • Variablenbenennung
  • Sprache (Englisch & Deutsch)
  • (fehlende) Formatierung

Warum übergibst du deinen Parameter überhaupt per ref? Lass das ref-Keyword doch einfach weg. Per Referenz übergeben wird deine dataset-Instanz trotzdem.

m0rius
Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg
private Nachricht | Beiträge des Benutzers
Cat
myCSharp.de - Member

Avatar #avatar-3070.jpg


Dabei seit:
Beiträge: 790

beantworten | zitieren | melden

Dafür musst du eine lokale Variable anlegen:


static void GeneralFunktion(ref dataset dscontent)
{
  dataset ds = dscontent;

  webclient.downloadfileasync("pfad1","pfad2");
  webclient.downloadfilecompleted+=(sender, e)=>
  {
     ds.readxml(pfad2);
  }
} 
Wobei ich nicht sehe, warum du 'ref' hier benötigst? Vllt. ist das eher dein Problem?

Und du meinst DataSet aus dem System.Data Namespace?

Btw: Benutze hier im Forum die C#-Tags (#-Button)
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 7540
Herkunft: Waidring

beantworten | zitieren | melden

Hallo Stefan8887878,

ergänzend zu den vorherigen Antworten siehe auch [Artikel] Parameter-Übergabemechanismen: call by value vs. call by reference (ref/out) und [Hinweis] Syntaxfehler selbst lösen (Compilerfehlermeldungen). Beachte bitte weiters [Hinweis] Wie poste ich richtig? Punkt 1.1.1.

Edit: Stefan8887878 hat mich per PM darauf hingewiesen, dass es ihm um eine "Rückgabe" von dscontent geht, daher der Versuch mittels ref. Das geht in diesem Falle aber wegen der anonymen Methode nicht bzw. widerspricht es auch dem asynchronen Gedanken. Grob: einmal asynchron - immer asnychron. Die Asynchronizität muss ich in Folge also durch das restliche Programm durchziehen.
Angewandt auf deine Aufgabe heißt das, dass der Aufrufer z.B. ebenfalls durch ein Ereignis benachrichtigt werden kann. Siehe hierzu [FAQ] Eigenen Event definieren / Information zu Events (Ereignis/Ereignisse). D.h. im Ereginishandler von Downloadfilecompleted feuerst du dein Ereignis um den Aufrufer zu benachrichtigen und in den EventArgs übergibts du das dscontent-DataSet.

Anstatt dem Ereignis-basierten asynchronen Muster kann ab .net 4.0 auch mittels Tasks und Continuations und ab .net 4.5 mit async/await gearbeitet werden.

mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
private Nachricht | Beiträge des Benutzers