我很难找到一个优雅的解决方案来确定接口中的数据类型,该接口在抽象类中用作泛型参数。
抽象类:
public abstract class Entity<T>
{
/// <summary>
/// Object Identifier
/// </summary>
public T Id { get; set; }
}
具体类:
public class Department: Entity<int>
{
// Additional properties
}
public class Employee: Entity<long>
{
// Additional properties
}
接口实现:
public interface IService<T1, T2>
where T1 : Entity<?>
where T2 : Entity<?>
{
Task TransferEmployeeToDepartment(? departmentId, ? employeeId);
}
问题的解决方案是将数据类型作为附加参数发送,但出于个人和OCD的原因,我不愿意这样做。有办法解决这个问题吗?
答案 0 :(得分:1)
同意丹尼斯的评论。根据您的方法名称,您将具体类Employee
转移到具体类Department
。这里没有通用的东西。
因此,如果您只想传输这两个实体,那么您的代码应该是这样的
public class Department: Entity<int>
{
// Additional properties
}
public class Employee: Entity<long>
{
// Additional properties
public Department TransferToDepartment() {} //implementation here
}
如果您的目标是将任何实体转移到任何其他实体,我会按以下方式重新构建您的界面
public interface IService<T1, T2>
{
Task TransferEmployeeToDepartment(Entity<T1> entityFrom, Entity<T2> entityTo);
}
但如果你是一组几乎不相关的实体(比如Department和Employee),我怀疑是否有可能为此编写一些好的通用代码