【发布时间】:2022-01-09 09:42:42
【问题描述】:
我想问如何在dotnet中获得这样的签名? 我有这三种方法
public IEnumerable<Position> GetOpenPositions(IEnumerable<AllianceOpenPosition> allianceOpenPositions, uint allianceId, IEnumerable<agile_shared.RequestModel.OpenPosition> orgOpenPositionList)
public IEnumerable<Position> GetOpenPositions(IEnumerable<SquadOpenPosition> squadOpenPositions, uint squadId, IEnumerable<agile_shared.RequestModel.OpenPosition> orgOpenPositionList)
public IEnumerable<Position> GetOpenPositions(IEnumerable<TribeOpenPosition> tribeOpenPosition, uint tribeId, IEnumerable<agile_shared.RequestModel.OpenPosition> orgOpenPositionList)
如您所见,签名之间的唯一区别是作为输入接收的列表类型。所有三个模型都统一在一个名为OpenPositionBase的基本抽象类下@
我想创建一个接口,以限制对象实现 GetOpenPositions 方法。
我尝试过创建类似的东西
public IEnumerable<Position> GetOpenPositions(IEnumerable<OpenPositionBase> tribeOpenPosition, uint tribeId, IEnumerable<agile_shared.RequestModel.OpenPosition> orgOpenPositionList)
通用基类
public class OpenPositionBase
{
public uint OpenPositionId { get; set; }
}
AllianceOpenPosition
public class AllianceOpenPosition : OpenPositionBase
{
public AllianceOpenPosition()
{
Alliance = new Alliance();
LeadRole = new LeadRole();
}
public uint Id { get; set; }
public uint AllianceId { get; set; }
public uint LeadRoleId { get; set; }
}
这个类是 IPositionConverter 接口的实现,我正在寻找以一般方式添加 GetOpenPositions 方法,因此在 SquadPositionConverter 类中我可以将此方法用作GetOpenPositions(IEnumerable<SquadOpenPosition> allianceOpenPositions, uint allianceId, IEnumerable<agile_shared.RequestModel.OpenPosition> orgOpenPositionList)
public class AlliancePositionConverter : IPositionConverter
{
public IEnumerable<Position> GetOpenPositions(IEnumerable<AllianceOpenPosition> allianceOpenPositions, uint allianceId, IEnumerable<agile_shared.RequestModel.OpenPosition> orgOpenPositionList)
{
return allianceOpenPositions.Where(w => w.AllianceId == allianceId)
.Select(s => new Position(orgOpenPositionList.FirstOrDefault(wh => wh.Id == s.OpenPositionId))
{
Id = s.Id.ToString(),
AgileRole = s.LeadRole.Name,
AgileRoleRank=s.LeadRole.Rank
}).ToList();
}
所有其余的类都有类似的结构。
然后将每个对象的参数更改为继承的模型。不幸的是,它给出了错误。
除了创建所有三个并仅实施所需的一个之外,还有任何可能的解决方案吗?
【问题讨论】:
-
它给你什么错误信息?看看你为
OpenPositionBase写的东西也很好 -
这种情况的错误信息是对象没有实现接口。
-
这个问题缺少一些相当关键的细节。您能否粘贴具体类、基类/接口并解释此方法的作用以及这些类的相似之处。
-
感谢您的评论。更新了描述
标签: c# oop inheritance .net-core