C# 通用接口在C中不起作用的问题#
我有一个界面:C# 通用接口在C中不起作用的问题#,c#,generics,C#,Generics,我有一个界面: interface IKey<TId, TName> where TId: IEquatable<TId> where TName: IEquatable<TName> { TId Id { get; set; } TName Name { get; set; } } interface-IKey 哪里TId:IEquatable 其中TName:IEquatable { TId Id{get;set;} t名
interface IKey<TId, TName>
where TId: IEquatable<TId>
where TName: IEquatable<TName>
{
TId Id { get; set; }
TName Name { get; set; }
}
interface-IKey
哪里TId:IEquatable
其中TName:IEquatable
{
TId Id{get;set;}
t名称{get;set;}
}
然后我像这样实现IKey:
class Item : IKey<int, string>
{
int Id { get; set; }
string Name { get; set; }
//...
}
类项:IKey
{
int Id{get;set;}
字符串名称{get;set;}
//...
}
我有一个可以处理这些项目的集合
class ItemCollection<T>
where T : IKey<TId, TName> //Any type that implements IEquatable<...>
where TId: IEquatable<TId>
where TName: IEquatable<TName>
{
//...
}
类项目集合
其中T:IKey//实现IEquatable的任何类型
哪里TId:IEquatable
其中TName:IEquatable
{
//...
}
问题是它不起作用。有没有一种方法我可以正确地做到这一点
还有另一个实现没有
IEquatable
,使用IKey
和IKey
,但它不适用于值类型,而是使用对象。Equals
问题是您试图在ItemCollection
中使用TId
和TName
,而从未定义它们。因为它们是T
上的接口约束的一部分,所以它们要么是具体类型,要么被指定为类型参数
class ItemCollection<T, TId, TName>
where T : IKey<TId, TName>
where TId : IEquatable<TId>
where TName : IEquatable<TName>
{
//...
}
类项目集合
T:IKey在哪里
哪里TId:IEquatable
其中TName:IEquatable
{
//...
}
使用硬编码类型的示例
class ItemCollection<T>
where T : IKey<string, string>
{
//...
}
类项目集合
T:IKey在哪里
{
//...
}