【发布时间】:2019-01-02 04:36:30
【问题描述】:
我有一些重载方法的问题,我会尝试给出一个简单的实现。
所以这是一个包含以下两个方法的类:
public class MyRepo<TEntity>
{
public List<TEntity> GetData(Expression<Func<TEntity, Boolean>> expression)
{
//Do something
}
public List<TEntity> GetData(Func<TEntity,Boolean> whereClause)
{
//Do something
}
}
这是我的实体:
public class MyEntity
{
public int Id { get; set; }
public string Name { get; set; }
}
这是我使用它的地方:
{
...
MyRepo<MyEntity> myRepo = new MyRepo<MyEntity>();
myRepo.GetData(x => x.Id == 1); // The ambiguity point
...
}
问题是我只有两个具有相同名称和不同参数的方法,因此,基于 OOP 多态性概念,我希望 .NET 能够理解我想要的方法。
但很明显.NET 无法理解它,因为Expression<Func<TEntity, Boolean>> 和Func<TEntity, Boolean> 的实例形式是相同的,这是.NET 引发的编译时错误:
The call is ambiguous between the following methods or properties:
'Program.MyRepo<TEntity>.GetData(Expression<Func<TEntity, bool>>)' and
'Program.MyRepo<TEntity>.GetData(Func<TEntity, bool>)'
问题是:如何防止这种编译时错误?
我的偏好是不要碰我在此行调用GetData() 的方式:
myRepo.GetData(x => x.Id == 1);
【问题讨论】:
标签: c# polymorphism