我有以下代码:
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);
}
}
理想情况下,我不想将x
强制转换为PersonMap
类。
我怎样才能做到这一点?
答案 0 :(得分:2)
您正在寻找的可能是:
public abstract class Base<T>
{
public void Test(Func<Base<T>, object> func)
{
func(this);
}
}
或者如果您在Base
对象中使用T作为属性:
public abstract class Base<T>
{
public T MyAwesomeProperty { get; private set; }
public void Test(Func<T, object> func)
{
func(MyAwesomeProperty);
}
}
T
!= Base<T>
为什么要使用泛型?您可以添加没有类型的函数,并执行与您尝试相同的操作。
public abstract class EntityMapperBase
{
protected void Map(string columnName, Func<object> func)
{
_mappings.Add(columnName, func);
}
protected object GetValueForColumn(string columnName)
{
return _mapping[columnName]();
}
}
public class PersonMap: EntityMapperBase
{
public string Name { get; set; }
public PersonMap()
{
Map(() => this.Name);
}
}