我的类的C#泛型列表包含找不到我的实例的方法
我们有几个类用于我们的CMS,我正在努力使等式工作,所以我可以检查通用列表是否包含一个项目。我们有一些继承层,我将在下面给你看。在此之下,我将向您展示一些与我的期望相反的示例代码。如果你看到我做错了什么,请告诉我。我已经减少了以下示例,只是为了向您展示相关的部分。我的实际课程要大得多,但我认为这是你需要看到的一切。
IBaseTemplate.cs
public interface IBaseTemplate {
bool Equals(IBaseTemplate other);
string GUID { get; }
}
BasePage.cs
public class BasePage : System.Web.UI.Page, IBaseTemplate, IEquatable<IBaseTemplate> {
// code to define properties, including GUID
// various constructors
public BasePage(string GUID) {
this.GUID = GUID;
}
// interface methods
public bool Equals(IBaseTemplate other) {
return (this.GUID == other.GUID);
}
}
LandingPage.cs
public class LandingPage : BasePage {
// a bunch of extra properties and method specific to LandingPage
// but NO definition for Equals since that's taken care of in BasePage
public LandingPage(string GUID) : base(GUID) {}
}
SamplePage.aspx.cs
var p1 = new LandingPage("{3473AEF9-7382-43E2-B783-DB9B88B825C5}");
var p2 = new LandingPage("{3473AEF9-7382-43E2-B783-DB9B88B825C5}");
var p3 = new LandingPage("{3473AEF9-7382-43E2-B783-DB9B88B825C5}");
var p4 = new LandingPage("{3473AEF9-7382-43E2-B783-DB9B88B825C5}");
var coll = new List<LandingPage>();
coll.Add(p1);
coll.Add(p2);
coll.Add(p3);
p1.Equals(p4); // True, as expected
coll.Contains(p4); // False, but I expect True here!
我希望coll.Contains(p4)
返回true
因为即使p1
到p4
是不同的实例,BasePage
的继承Equals
方法比较their11ѭ所要求的GUID
属性。我在这里错过了什么吗?
我查看了List(T)的Contains方法的文档,我正在实现IEquatable<T>.Equals
,其中T
是IBaseTemplate
。
没有找到相关结果
已邀请:
5 个回复
春驹晴陪
- 请参阅此链接。
逝媳蘑贩茄
尝试让您的接口实现IEqualityComparer并使显式
脱离接口定义。
仇聘发栖
方法使用
方法,你的
类型需要实现
而不是
。 此方法通过确定相等性 使用默认的相等比较器, 由对象定义 实施
方法
(列表中的值的类型)。 因为你的类没有实现
,所以
方法又回归到使用虚拟的非泛型
方法。在你的
类中覆盖那个方法应该可以解决问题
宠封钞轰
这个接口的默认实现可能是这个,并注意IEquatable是如何实现的:
痰降锭骂奸
编辑 为什么不比较GUID?