クラスの型(またはインスタンス)とともに、式ツリーをパラメーターとして受け入れるメソッドに取り組んでいます。
基本的な考え方は、このメソッドが検証に使用されるコレクションに特定のものを追加することです。
public interface ITestInterface
{
//Specify stuff here.
}
private static void DoSomething<T>(Expression<Func<T, object>> expression, params IMyInterface[] rule)
{
// Stuff is done here.
}
このメソッドは次のように呼び出されます。
class TestClass
{
public int MyProperty { get; set; }
}
class OtherTestClass : ITestInterface
{
// Blah Blah Blah.
}
static void Main(string[] args)
{
DoSomething<TestClass>(t => t.MyProperty,
new OtherTestClass());
}
渡されるプロパティ名を強く型付けしたいので、このようにしています。
私が苦労しているいくつかのこと..
PropertyInfo
DoSomething内で、 (渡された本体から)Tの型を取得し、それをrule[]とともにコレクションに追加したいと思います。現在、expression.Bodyを使用し、「Convert。([propertyname])」から[propertyname]を削除し、リフレクションを使用して必要なものを取得することを考えています。これは面倒で間違っているようです。もっと良い方法はありますか?- これは私が使用している特定のパターンですか?
- 最後に、私が行っていることについての私の誤解に関する提案や説明があれば幸いです。また、C#式ツリーに関するリソースや優れた情報も高く評価されます。
ありがとう!
イアン
編集:
expression.Body.ToString()
DoSomethingメソッド内で返されるものの例は、上記の例から呼び出された場合に「Convert(t.MyProperty)」を含む文字列です。
強く型付けする必要があるので、プロパティ名を変更してもコンパイルされません。
提案をありがとう!