是否有可能,如果是這樣,我該如何重寫的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. 覆蓋列表<T>的添加()
- 3. C#列表覆蓋
- 4. Java列表覆蓋
- 5. 用fputcsv覆蓋列
- 6. 覆蓋Sharepoint列表事件
- 7. bootstrap覆蓋列表組
- 8. Magento:產品列表覆蓋
- 9. Div覆蓋幾個表列
- 10. c#「like/contains」通過列表搜索
- 11. 如何覆蓋列表<T> .IsReadOnly在C#
- 12. .NET抽象覆蓋怪癖
- 13. 覆蓋MongoDb .NET CRUD方法
- 14. C#覆蓋通用型
- 15. 我想幫助Finder覆蓋全路徑!(列表覆蓋)
- 16. 覆蓋的運算符<< in C++
- 17. 覆蓋表面
- 18. 列表<?擴展MyType>
- 19. 控件覆蓋.net應用程序
- 20. 如何覆蓋.NET的詞典<K,V> Array lookup'[]'?
- 21. 覆蓋覆蓋?
- 22. BIQ QUERY /通過php覆蓋表格
- 23. 代碼覆蓋率:.NET代碼覆蓋率和SonarQube VSTS集成
- 24. 陣列被覆蓋
- 25. JavaScript:覆蓋陣列
- 26. .Net Hashtable - Contains vs ContainsKey
- 27. 使用PHPTemplate覆蓋表格
- 28. HashSet <String> .contains()
- 29. 以某種順序訂購通用列表<T> .NET
- 30. Android - 覆蓋社交分享列表(通過ACTION_SEND)
從你的問題來看,你需要達到什麼目標有點不清楚。你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