如何将 == 应用于泛型类型 - C# 中的 string 或 int 等数据类型

How to apply == to generic types - data types like string or int in C#

我有以下通用 classes:

public class Entity<Key>
{
    public Key ID;
}

public interface IEntity<T>
{
    T ID { get; set; }
}

public class GenericRepo<TEntity,CEntity,Key>
    where TEntity : class, IEntity<Key>
    where CEntity : class, IEntity<Key>
{
    protected readonly DataContext _context;
    protected readonly IMapper _mapper;

    public GenericRepo(DataContext context, IMapper mapper)
    {
        _context = context;
        _mapper = mapper;
    }

    public CEntity GetByID(Key id)
    {
        //here i get operators == cannot be applied to operands of type 'Key' and 'Key'
        TEntity dbEntity = _context.Set<TEntity>().FirstOrDefault(e => e.ID == id);

        if (dbEntity == null)
        {
            return null;
        }

        return _mapper.Map<CEntity>(dbEntity);
    }
}

我正在尝试将通用类型 Key 传递给 ID 属性。当我在传递的参数上使用 == 和 Set 的 属性 也是类型 Key 时,我得到 operators == cannot be applied to operands of type 'Key' and 'Key',因为它们是相同的泛型类型 Key,如何在这些 class 上实现 Key 的平等?

我需要传递的类型是intstring

但是,我尝试在classwhere T : Type中添加一个where子句,删除了操作数错误,但现在我无法通过string或[=18] =] 像下面的 Entity<int> 我得到 there is no boxing conversion from int to System.Type.

我看到了一些答案,比如使用 .Equals 和将 IComparer 实现到 classes,但在我的例子中它是一个类型,我需要 == 在 LINQ to SQL 在 ef-core 中。

是否有任何 where 条件可以添加到 class,我可以将类型传递给我的 class 并使用 == 或任何其他方式?

How to apply == to generic types

你没有。可以说 .NET 类型系统的一个弱点是泛型无法处理操作,因为操作是通过静态方法定义的。

您几乎必须通过 IComparable 或类似的界面。

我最终使用了一个简单的 .Equals()

TDataSet dbEntity = _context.Set<TDataSet>().FirstOrDefault(e => e.ID.Equals(id));