如何将 == 应用于泛型类型 - 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
的平等?
我需要传递的类型是int
或string
。
但是,我尝试在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));
我有以下通用 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
的平等?
我需要传递的类型是int
或string
。
但是,我尝试在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));