3

パラメータがオブジェクトインスタンスの型であることを型パラメータで指定する方法はありますか?

たとえば、説明のために、私は次のようにしています。

public abstract class Model
{
    public int Prop1 { get; set; }
}

私の例では、Model渡されたプロパティを返すメソッドが必要です(明らかに、これはばかげたメソッドですが、ポイントを取得します)。私はそれを拡張メソッドとして機能させることができます:

public static class Extensions
{
    public static U Property<T, U>(this T model, Expression<Func<T, U>> property) where T : Model
    {
        return property.Compile().Invoke(model);
    }
}

このように私は持つことができます

public class DerivedModel : Model
{
    public string Prop2 { get; set; }
}

そして、やります

var myString = new DerivedModel().Property(a => a.Prop2);

Modelこのメソッドはクラスの一部である必要があるようで、次のようになります。

public T Property<T>(Expression<Func<ThisDerivedInstanceOfModel, T>> property)
{
    return property.Compile().Invoke(this);
}

拡張メソッドが行うのと同じ呼び出しがProperty()のインスタンスで実行できるようにしますModel

これは一種の奇妙なことであり、C#の機能ではない可能性があり、回避策の拡張メソッドは完全に機能しますが、可能であれば、これをインスタンスメソッドにすることをお勧めします。

4

1 に答える 1

4

パラメータがオブジェクトインスタンスの型であることを型パラメータで指定する方法はありますか?

いいえ。ごめん。役に立つと思うこともありますが、それはあなたにできることではありません。私は過去に同様の問題を抱えていました:(

于 2012-06-01T15:36:06.630 に答える