2017-04-18 5 views
-2

私のラムダ式で "co"にアクセスできるようにしたい。それは可能ですか?もしそうなら、どのように?もしそうでなければ、代わりに何をすべきですか?labda式で変数にアクセスできますか? c#

「Do」の範囲で変数を使用できるようにするために、関数「Do」にコードブロックを渡したいとします。

あなたは私が何について話しているのかわからない場合は、私に質問してください。

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? */ }); 
      } 
     } 
    } 

私は1つを得るとき、私は答えを、この記事を更新します。 - >One answer that work !!!

+2

'co'は別のクラスで宣言されています(少なくともあなたのコードからそのように見えます)。現在宣言されているクラスのパブリックプロパティにするか、他のクラスからアクセスするか、またはコンストラクタやメソッド呼び出しを通じて 'Get'クラスに渡す必要があります。 –

答えて

0

を私はあなたが正確に何をしたい、理解していません。

しかし、あなたが呼び出す場合:

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

() => {}は、ラムダ式に関数を表します。しかし、関数は型宣言から独立しています。あなたの型宣言では、あなたはパラメータとしての関数を持っていますが、この関数はあなたの型から独立しています。

私は、それが "co"にアクセスできない理由だと思います。

更新:

これはあなたのための解決策ですか?

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

私がしたいことは、 "Do"関数でコードブロックを実行し、このコードブロックで "Do"でスコープされた変数にアクセスできることです。 –

+0

私はあなたが欲しいものを理解しています。私は私の答えを更新しました。それがあなたを助けることを願っています –

+0

本当に素晴らしい、ありがとう、それは本当に素晴らしい仕事。 –

関連する問題