确定接口中使用的泛型的数据类型参数

本文关键字:泛型 数据 类型参数 接口 | 更新日期: 2023-09-27 18:04:08

我正在努力寻找一个优雅的解决方案来确定在抽象类中用作泛型参数的接口中的数据类型。

抽象类:

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);
}

该问题的解决方案是将数据类型作为附加参数发送,但出于个人和强迫症的原因,我不喜欢这样做。有办法解决这个问题吗?

确定接口中使用的泛型的数据类型参数

同意Dennis的意见。根据您的方法名称,您将混凝土类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),我怀疑是否有可能为这个

编写一些好的通用代码。