2012-03-14 55 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使用任何)