2012-03-14 51 views
3

如何通過強類型列表搜索字符串?如何搜索字符串的強類型列表?

我在嘗試。載有(TheString),但它的錯誤,說明無法轉換類型的對象「System.String」輸入「o7thCrawler.Typing.ImportantTyping」

下面是代碼:

Public Class LinkTyping 
    Public Property Url As String 
    Public Property Title As String 
    Public Property Content As String 
End Class 

If Not (_InternalUrls.Contains(_Url & _Link)) Then 
    _InternalUrls.Add(New Typing.LinkTyping() With { 
                  .Url = _Url & _Link, 
                  .Content = Item.Value, 
                  .Title = If(Item.Attribute("title") IsNot Nothing, 
                     Item.Attribute("title").Value, 
                     Nothing) 
                 }) 
End If 

回答

2

你試圖鞋拔2種到同一列表...

是什麼類型InternalUrls

此:

If Not (_InternalUrls.Contains(_Url & _Link)) Then 

言下之意這是一個IList(Of String)

但這:

_InternalUrls.Add(New Typing.LinkTyping() With { 

然後嘗試添加LinkTyping類它的新實例...

如何...

InternalURLsList(Of LinkTyping)

然後

Dim MyUrl = String.Format("{0}{1}", _Url, _Link) 
If Not InternalURLs.Any(function(x) x.Url = MyUrl) Then 
    InternalURLs.Add(New Typing.LinkTyping() With {<Blah>}) 

End If 

NB:上面的解決方案假定的URL將要用於匹配的目的相同的情況下(如貴例如,假設沒有過載的比較運營商) - 您可能希望使用不區分大小寫的比較...

If Not InternalURLs.Any(function(x) String.Equals(x.Url, MyUrl, StringComparison.OrdinalIgnoreCase)) Then 
+0

InternalUrls = List(Of Typing.LinkTyping) – Kevin 2012-03-14 17:05:24

+0

@ o7thWebDesign您是否正在爲您的LinkTyping類實現自定義比較器 - 用於'.Contains'?上面的代碼是如何爲你工作的? – Basic 2012-03-14 17:07:36

+0

工作很好。它抓住了所有潛在的重複。我使用了.Any,因爲我在這之前已經強制所有的.ToLower()。 – Kevin 2012-03-14 18:37:42

1

假設_InternalUrls是一個List,那麼Contains方法將使用Equals的對象實現來決定一個對象是否已經在一個集合中。所以一種選擇是爲您的課程重載Equals。

MSDN Link

+0

我會怎麼做呢?是的,_InternalUrls是有問題的列表,是一個精確的列表(Typing.LinkTyping)。 – Kevin 2012-03-14 16:45:24

+0

@ o7thWebDesign:我的鏈接包含一個很好的示例 – 2012-03-14 16:48:11

1

這實際上是非常簡單的用lambda表達式做:

If _InternalUrls.Any(Function(l) l.Url = _Url) Then 
    ' Do Add Logic Here 

你需要在頂部以下內容:

Imports System.Linq 

(改變了FirstOrDefault使用任何)