から派生したクラスの型であるI次のコードを持っている:私は理想的PersonMap
クラスにx
をキャストする必要はしたくないでしょうラムダ式の型を作るためにどのように汎用の基本クラス
public abstract class EntityMapperBase<T>
{
protected void Map(string columnName, Func<EntityMapperBase<T>, object> func)
{
_mappings.Add(columnName, func);
}
protected object GetValueForColumn(string columnName)
{
return _mapping[columnName](this);
}
}
public class PersonMap: EntityMapperBase<PersonMap>
{
public string Name { get; set; }
public PersonMap()
{
Map(x => ((PersonMap)x).Name);
}
}
を。
どうすれば実現できますか? !
public abstract class Base<T>
{
public T MyAwesomeProperty { get; private set; }
public void Test(Func<T, object> func)
{
func(MyAwesomeProperty);
}
}
T
= Base<T>
なぜ使用:あなたはBase
オブジェクトの内部プロパティとしてTを使用する場合
public abstract class Base<T>
{
public void Test(Func<Base<T>, object> func)
{
func(this);
}
}
または:
'T'が' string'であるとします。あなたは 'Func'を受け入れています。なぜあなたは 'Base 'を渡すことでそれを呼び出すことができると思いますか?おそらく、あなたのパラメータは 'Func 、object>'でなければなりません。あなたは何を達成しようとしていますか?これは現時点ではX-Y問題のビットです。 –
私は関数の派生クラスのプロパティにアクセスしようとしています。 'Test(x => x.Name)'のように。 xは 'Base'になりますので、それを防ぐためにxをTにキャストする必要があります。 –
adriaanp
あなたのメソッドも汎用性が必要なのでしょうか?残念ながら、私が前に言ったように、あなたが実際に達成しようとしていることを私たちに語っていないので、本当にあなたを助けることはできません。 –