是否有可能,如果是這樣,我該如何重寫的Contains
方法,其中T
是我自己的自定義類型?覆蓋.NET通用列表<MyType> .Contains(MyTypeInstance)?
7
A
回答
5
爲了使自己的包含執行,你可以創建一個實現IList接口的類。這樣你的班級就會像IList一樣。你可以在內部有一個真正的List來做標準的東西。
class MyTypeList : IList<MyType>
{
private List<MyType> internalList = new ...;
public bool Contains(MyType instance)
{
}
....
}
2
您需要覆蓋班級中的Equals
和GetHashCode
(MyType
)。
0
如果你實現你的平等自定義類型,包含列表的功能將工作
7
List<T>
使用EqualityComparer<T>.Default
做比較;首先檢查你的對象是否實現IEquatable<T>
;否則使用object.Equals
。
所以;最簡單的方法是覆蓋Equals
(總是更新GetHashCode
以匹配Equals
中的邏輯)。另外,使用LINQ來代替:
bool hasValue = list.Any(x => x.Foo == someValue);
1
取決於你有什麼具體的需求進行覆蓋,你可以使用LINQ表達式做這件事:
list.Any(x => x.Name.Equals("asdas", .....)) // whatever comparison you need
然後,您可以把它包裝在方便的擴展方法。
相關問題
- 1. 如何覆蓋Contains()?
- 2. .Net圖表未被覆蓋
- 3. Java列表覆蓋
- 4. C#列表覆蓋
- 5. 列表被覆蓋?
- 6. 覆蓋列表<baseClass>與名單<derivedClass>
- 7. 覆蓋has_many <<功能
- 8. 覆蓋<ui:define>
- 9. .NET - 合併表中未覆蓋
- 10. 用fputcsv覆蓋列
- 11. c#列表覆蓋問題
- 12. 如何覆蓋列表?
- 13. Magento:產品列表覆蓋
- 14. 覆蓋列表方法
- 15. RecyclerView覆蓋列表項
- 16. Python覆蓋列表元素
- 17. bootstrap覆蓋列表組
- 18. 覆蓋Sharepoint列表事件
- 19. Div覆蓋幾個表列
- 20. 列表 - 列表元素被覆蓋
- 21. c#「like/contains」通過列表搜索
- 22. 覆蓋列表框中的itemsource屬性c#.net
- 23. 覆蓋MongoDb .NET CRUD方法
- 24. .NET抽象覆蓋怪癖
- 25. .NET代碼覆蓋工具
- 26. Net Suite覆蓋內部ID
- 27. 列表<Object>刪除重複,覆蓋equals
- 28. 如何覆蓋列表<T> .IsReadOnly在C#
- 29. 如何覆蓋列表中的特定項目<object>
- 30. C#覆蓋通用型
從你的問題來看,你需要達到什麼目標有點不清楚。你a)是否需要標準Contains與你的自定義類型一起工作,或者b)在調用Contains時做一些特殊的邏輯? – 2009-04-08 08:57:51
彼得,基本上是列表我在運行時不是在內存中,它是鬆散/弱引用到OODBMS。如果我在List上做一個native .net .Contains,它會從oodbms後端檢索整個列表並在本地進行評估。因此,我想用適當的(後端)查詢語法覆蓋它。 –
2009-04-09 13:11:15
@Jörg - 記住這一點,重寫Equals/GetHashCode如何解決您的問題(@Cans答案)? – 2009-04-11 10:23:10