Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/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# 没有来自';的装箱转换或类型参数转换;TKey';至';System.IEquatable';_C#_Generics - Fatal编程技术网

C# 没有来自';的装箱转换或类型参数转换;TKey';至';System.IEquatable';

C# 没有来自';的装箱转换或类型参数转换;TKey';至';System.IEquatable';,c#,generics,C#,Generics,我有以下代码 public abstract class BaseEntity<TKey> : IIdentifiable<TKey> { public TKey Id { get; set; } } public interface IIdentifiable<TKey> where TKey : IEquatable<TKey> { TKey Id { get; set;

我有以下代码

    public abstract class BaseEntity<TKey> : IIdentifiable<TKey>
    {
        public TKey Id { get; set; }
    }

    public interface IIdentifiable<TKey> where TKey : IEquatable<TKey>
    {
        TKey Id { get; set; }
    }
公共抽象类BaseEntity:IIIdentifiable
{
公钥Id{get;set;}
}
可识别的公共接口,其中TKey:IEquatable
{
TKey Id{get;set;}
}
BaseEntity

错误CS0314类型“TKey”不能用作类型参数“TKey” 在泛型类型或方法“IIIdentifiable”中。没有 从“TKey”到的装箱转换或类型参数转换 “System.IEquatable”


我做错了什么?

如错误消息所示:

There is no boxing conversion or type parameter conversion from 'TKey' to 'System.IEquatable'
在抽象类级别再次指定约束将解决此问题:

    public abstract class BaseEntity<TKey> : IIdentifiable<TKey> where TKey : IEquatable<TKey>
{
    public TKey Id { get; set; }
}

public interface IIdentifiable<TKey> where TKey : IEquatable<TKey>
{
    TKey Id { get; set; }
}
公共抽象类BaseEntity:IIdentifiable,其中TKey:IEquatable
{
公钥Id{get;set;}
}
可识别的公共接口,其中TKey:IEquatable
{
TKey Id{get;set;}
}
这是因为抽象类中的Tkey与接口中的Tkey不同,所以应该再次指定约束,使其成为相同的装箱类型

例如,此代码也将有效:

public abstract class BaseEntity<TKey2> : IIdentifiable<TKey2> where TKey2 : IEquatable<TKey2>
{
    public TKey2 Id { get; set; }
}

public interface IIdentifiable<TKey> where TKey : IEquatable<TKey>
{
    TKey Id { get; set; }
}
公共抽象类BaseEntity:IIdentifiable,其中TKey2:IEquatable
{
公共TKey2 Id{get;set;}
}
可识别的公共接口,其中TKey:IEquatable
{
TKey Id{get;set;}
}

如错误消息所示:

There is no boxing conversion or type parameter conversion from 'TKey' to 'System.IEquatable'
在抽象类级别再次指定约束将解决此问题:

    public abstract class BaseEntity<TKey> : IIdentifiable<TKey> where TKey : IEquatable<TKey>
{
    public TKey Id { get; set; }
}

public interface IIdentifiable<TKey> where TKey : IEquatable<TKey>
{
    TKey Id { get; set; }
}
公共抽象类BaseEntity:IIdentifiable,其中TKey:IEquatable
{
公钥Id{get;set;}
}
可识别的公共接口,其中TKey:IEquatable
{
TKey Id{get;set;}
}
这是因为抽象类中的Tkey与接口中的Tkey不同,所以应该再次指定约束,使其成为相同的装箱类型

例如,此代码也将有效:

public abstract class BaseEntity<TKey2> : IIdentifiable<TKey2> where TKey2 : IEquatable<TKey2>
{
    public TKey2 Id { get; set; }
}

public interface IIdentifiable<TKey> where TKey : IEquatable<TKey>
{
    TKey Id { get; set; }
}
公共抽象类BaseEntity:IIdentifiable,其中TKey2:IEquatable
{
公共TKey2 Id{get;set;}
}
可识别的公共接口,其中TKey:IEquatable
{
TKey Id{get;set;}
}

再次读取异常消息。现在写这个:
公共抽象类BaseEntity:IIdentifiable,其中TKey:IEquatable
哦,是的。很抱歉但再次感谢您的帮助阅读异常消息。现在写这个:
公共抽象类BaseEntity:IIdentifiable,其中TKey:IEquatable
哦,是的。很抱歉但是谢谢你的帮助