2017-04-18 2 views
-2

Ich möchte auf "co" in meinem Lambda-Ausdruck zugreifen können. Ist es möglich? wenn ja wie? oder wenn nicht, was soll ich stattdessen tun?Ist es möglich, auf eine Variable in einem Labda-Ausdruck zuzugreifen? C#

Ich möchte einen Code-Block in meiner Funktion "Do" übergeben, wo ich die Variablen im Rahmen von "Do" verwenden könnte.

Bitte stellen Sie mir eine Frage, wenn Sie nicht wissen, worüber ich rede, versuchen Sie es besser zu erklären.

public static type Do<type>(Func<type> fun) 
    { 
     OracleConnection co = null; 
     type ret = default(type); 
     try 
     { 
      co = CreateCo(); 
      MessageBox.Show("Connected"); 
      ret = fun(); 
     } 
     catch (Exception) 
     { 
      MessageBox.Show("Error"); 
     } 
     finally 
     { 
      CloseCo(co); 
     } 
     return ret; 
    } 

    public static class Get 
    { 
     public static class Question 
     { 
      public static string byId() 
      { 
       //This lambda expression 
       return Do<string>(() => 
       { co./*here I can't access my object: why? how? */ }); 
      } 
     } 
    } 

Ich werde aktualisieren diesen Beitrag mit der Antwort, wenn ich einen bekommen: ->One answer that work !!!

+2

'co' ist in einer anderen Klasse deklariert (zumindest sieht es so aus Ihrem Code). Sie müssten es entweder zu einer öffentlichen Eigenschaft der Klasse machen, für die es derzeit deklariert ist, und dann von der anderen Klasse darauf zugreifen oder es über einen Konstruktor- oder Methodenaufruf an die Klasse "Get" übergeben. –

Antwort

0

Ich verstehe nicht, was Sie genau wollen.

Aber wenn Sie anrufen:

return Do<string>(() => { }); 

die () => {} eine Funktion mit lamda Ausdruck darstellt. Die Funktion ist jedoch unabhängig von Ihrer Typdeklaration. In Ihrer Typdeklaration haben Sie eine Funktion als Parameter, aber diese Funktion ist unabhängig von Ihrem Typ.

Ich denke, das ist der Grund, warum Sie keinen Zugriff auf die "Co" haben.

Aktualisierung:

Ist das eine Lösung für Sie?

public static class Get 
{ 
    public static class Question 
    { 
     public static string byId() 
     { 
      Func<OracleConnection, string> func1 = (co) => co.ToString(); 


      return Do<string>(func1); 
     } 
    } 
} 

public static type Do<type>(Func<OracleConnection, type> fun) 
    { 
     OracleConnection co = null; 
     type ret = default(type); 
     try 
     { 
      co = CreateCo(); 
      MessageBox.Show("Connected"); 
      ret = fun(co); 
     } 
     catch (Exception) 
     { 
      MessageBox.Show("Error"); 
     } 
     finally 
     { 
      CloseCo(co); 
     } 
     return ret; 
    } 
+0

Sinn machen, Was ich tun möchte, ist ein Code-Block in der "Do" -Funktion auszuführen und in diesem Code-Block in der Lage sein, auf die Variablen zuzugreifen, die in "Do" definiert sind. –

+0

Ich verstehe, was Sie wollen. Ich habe meine Antwort aktualisiert. Ich hoffe es hilft dir. –

+0

Einfach fantastisch, vielen Dank, es funktioniert wirklich gut. –

Verwandte Themen