为了账号安全,请及时绑定邮箱和手机立即绑定

没有从“TKey”到“System.IEquatable”的装箱转换或类型参数转换

没有从“TKey”到“System.IEquatable”的装箱转换或类型参数转换

C#
慕斯709654 2023-05-13 16:15:00
我有以下代码    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; }

}


查看完整回答
反对 回复 2023-05-13
  • 1 回答
  • 0 关注
  • 165 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信