辞書のキーとして式の種類を使用するにはどうすればよいですか?式<Func<object>を辞書のキーとして使用
私はExpressionインスタンスで遊んだばかりですが、私がしたいことが可能かどうかはわかりません。
私は試したときと同じ2つの式が同じではないようですが、式をキーとして辞書にエントリを入れることはできますが、キーが含まれているかどうかを辞書に尋ねるとfalseを返します。非常に同じ表現のインスタンス。
TypeToTest test = new TypeToTest();
Expression<Func<object>> expression =()=>test.PropertyA;
IDictionary<Expression<Func<object>>,bool> dictionary = new Dictionary<Expression<Func<object>>, bool>();
dictionary[expression] = true;
Assert.That (dictionary.ContainsKey(expression), Is.True);
Assert.That (dictionary.ContainsKey(()=>test.PropertyA), Is.True);
上記の最後の行は失敗します。
目的は、オブジェクトのプロパティまたはメソッドに適用される一連のルールを定義する能力を持つことです。たとえば、プロパティが編集可能な場合、または辞書内の特定のキーを持つ値削除することができます。私は編集可能であるかどうかを判断するオブジェクトにフラグを持たせたくないということです(編集可能性は異なるプロパティに応じて異なる可能性があります)。また、それが削除可能かどうかを判断する別のクラスが、関連するルールを維持する責任を負います将来オブジェクトが拡張されるにつれて、オブジェクトの構成部分の編集可能性/アクセシビリティ/削除可能性を記述するために、より多くの規則が追加され得るように、オブジェクトを伴う。それが意味をなさないならば。
hereのような投稿がありましたが、これはプロパティ名に基づいているようですが、メソッドと引数をキー入力することができるようにしたいので、保持するオブジェクトの編集可能性を判断することができますキーに基づいた辞書で
このようなことは可能でしょうか、それとも空のパイですか?
なぜあなたはそのキーの良い選択ではないと思いますか?タイプ/タイプが拡張されている(別のインターフェースといっしょに) –
@Samの場合、各プロパティ/メソッドのアクセス可能性を個別に制御できるように思われます。例えば; 'x => x.A'は' y => y.A'と同じ表現ですか?エクスプレッションがキャプチャされた変数ラッパーであるオブジェクトインスタンスをキャプチャするとどうなりますか? –
このための素晴らしい解決策。 – IamStalker