我有以下代码 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错误 CS0314 类型“TKey”不能用作泛型类型或方法“IIdentifiable”中的类型参数“TKey”。没有从“TKey”到“System.IEquatable”的装箱转换或类型参数转换我究竟做错了什么?
1 回答

芜湖不芜
TA贡献1796条经验 获得超7个赞
如错误信息所示:
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; }
}
那是因为抽象类中的 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; }
}
- 1 回答
- 0 关注
- 165 浏览
添加回答
举报
0/150
提交
取消