2016-10-19 11 views
0

この質問は、this oneの(ただし重複しない)接続されています。私はC#をかなり新しくしていると考えてください。 可能であれば、後で使用するためにジェットをインスタンス化していないオブジェクトのメンバのハンドルを取得したいと思います。前の質問の後、私は彼らの価値は、彼らがのメンバーであるオブジェクトの状態に依存して、MEMBER1とMember2は静的メンバであるために仮定されていないインスタンス化のないクラスのメンバーのハンドルを取得します。

List<Action<YourClass>> lst = new List<Action<YourClass>>; 

lst.Add(x => x.Member1); 
lst.Add(x => x.Member2); 

ような何かをしたいと思います。基本的には、 "名前"のハンドルが必要なので、後でオブジェクトをインスタンス化するときに使用できます。私は値がメンバー名であるストリングに基づいたアプローチについて考えていましたが、おそらくもっと良い方法がありますか?おかげさまで

+2

のx => x.Member1'は 'アクション' 'ではない、それは' 'のFunc です。これは全体の質問を理解できないようにします。 –

+0

これがうまくいけば分かります。 – Vaaal88

答えて

0

私は解決策にヘンクのコメントのおかげで見つかった:

Func<myObj, Vector> getVect = new Func<myObj, Vector> 
getVect= (myObj => myObj.objVector); 

objVectorは方法が、このmyobjのメンバーではありません。 私は、このようにgetVectを呼び出す:

Vector a= getVect(someObj) 
0

私はあなたが正しいかどうか分かりません。まず、リストからインスタンスを作成する必要があります。

List<Action<YourClass>> lst = new List<Action<YourClass>>; 

これ以外の場合、追加はNullReference-Exceptionで壊れます。 Addで使用しているものは、ハンドルが保存されないため、匿名関数と呼ばれます。これを保存したい場合は、delegateが必要です。このデリゲートでは、Invoke-Methodeを呼び出して呼び出すことができます。代理人を作成することはもちろん、アクションのような定義済みのものを使用することもできます。

は、ここで任意のローミングサービスのない小さな例ですが、多分明らかにする:

var action = new Action<string>(x => x = x.Substring(1, 1)); 
    //Do some other stuff 
    action.Invoke("Hallo"); 

注使用varキーワードいます。それは新しいアクションの結果を検出し、これのタイプを取る。この場合、アクションが保持されます。

さらに、Actionは定義済みのデリゲートであることに注意してください。もう1つは戻り値が1つあるFuncです。他の動作が必要な場合は、簡単に独自の代理人を作成できます。このためにはリンクを読むべきです。

+0

私はあなたの答えをチェックし、私が探しているものと一致するかどうかを確認します。 – Vaaal88

+0

私がしたいのは、メソッドではなく、オブジェクトの_member_に匿名でアクセスすることです。 – Vaaal88

関連する問題