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
哦,是的。很抱歉但是谢谢你的帮助