パラメータがオブジェクトインスタンスの型であることを型パラメータで指定する方法はありますか?
たとえば、説明のために、私は次のようにしています。
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#の機能ではない可能性があり、回避策の拡張メソッドは完全に機能しますが、可能であれば、これをインスタンスメソッドにすることをお勧めします。