我有一个服务调用,它返回给我一个IEnumerable的CustomObject,这是第三方调用,我没有自由修改。可以假定CustomObject具有如下定义:
public class CustomObject
{
public int Id { get; set; }
public string Name { get; set; }
...
...
...
public int Points { get; set; }
public bool IsPrivate { get; set; }
}
在返回的对象列表中,我可以拥有特殊的CustomObject对象。我需要实现一些特殊规则,例如:
实施这些规则的最佳位置是什么。我考虑过实现IEqualityComparer并在我的服务调用上执行.Distinct(),这似乎不是IEqualityComparer的意思。
建议?
答案 0 :(得分:2)
由于您无法修改类'CustomObject',我会将业务逻辑添加到'render'管道中,只需调用某些功能,例如下面您应用的特定业务规则。然后从要渲染的对象列表中删除id1和id3,只渲染从以下函数返回的对象。
CustomObject BizRule3293(IEnumerable<CustomObject> objects)
{
CustomObject id1 = objects.SingleOrDefault(t => t.Id == 1);
CustomObject id3 = objects.SingleOrDefault(t => t.Id == 3);
if (id1 != null && id3 !=null)
{
if (!id1.IsPrivate && !id3.IsPrivate)
return id1.Points > id3.Points ? id1 : id3;
return id1.IsPrivate ? id3 : id1;
// No logic stated if both are private
}
return id1 ?? id3;
}