gpt4 book ai didi

c# - 在 IEquatable 上重写等于

转载 作者:太空宇宙 更新时间:2023-11-03 19:06:24 27 4
gpt4 key购买 nike

我尝试使用以下方法来阻止人们更改 querystring为了查看其他人的详细信息:

public static bool IsCurrentUserAuthorisedVessel(HttpRequest request)
{
Guid currentUser = GetCurrentUserId();
PersonRepository repo = new PersonRepository();
VesselRepository vesselRepo = new VesselRepository();

Person currentPerson = repo.GetPersonByUser(currentUser);
int qs = int.Parse(request.QueryString["VesselId"]);
Vessel currentVessel = vesselRepo.GetVessel(qs);

if (!String.IsNullOrEmpty(request.QueryString["VesselId"]))
{
if (IsCurrentUserAdmin())
{
return true; //Always return true for admin
}
else
{
if (currentPerson.Vessels.Contains(currentVessel))
{
return true;
}
else
return false;
}
}
return true;
}

在我目前正在调试的例子中currentPerson.VesselsIcollection<Vessel> 中产生 3 个容器其中一个有VesselId 6 也恰好是 currentVessel 的 VesselId但是匹配失败,方法返回 false .

我已经阅读了一些类似的 SO 问题和 MSDN 文档,我对这里发生的事情的理解是因为 ICollection 中 ID 为 6 的 Vessel 是我试图匹配的 currentVessel 的不同实例, reference 导致不相等,并且与相等规则不基于 ID 有关。

我的 Person模型包含 public virtual ICollection<Vessel> Vessels { get; set; }这是否意味着我必须实现 IEquatable我的界面 Vessel模型,然后覆盖 Equals 方法。

在这种情况下,我想要自己的基于 id 的自定义规则以实现平等。如何重写此方法?

最佳答案

在这种情况下重写 Equals 似乎有点矫枉过正,为什么不这样做

currentPerson.Vessels.Any(x => x.ID == currentVessel.ID)

关于c# - 在 IEquatable 上重写等于,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26737633/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com