Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通用接口在C中不起作用的问题#_C#_Generics - Fatal编程技术网

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在哪里
{
//...
}