2012-08-30 28 views
0

我想创建一个try catch,以便如果feed不存在或者由于某种原因无法创建,它将返回false或null,以便我可以测试变量并创建一个默认项目。实现尝试,抓住联合馈送(RSS)类型

Function GetFeed(url As String) As SyndicationFeed 

    Dim feed = New SyndicationFeed 

    Try 
     Dim reader = XmlReader.Create(url) 
     feed = SyndicationFeed.Load(reader) 
    Catch ex As Exception 
     feed = Nothing 
    End Try 

    Return feed 

End Function 

它说我不能将类型“SyndicationFeed”设置为布尔值。

该错误是与此代码:

Dim feedUrl = "http://rss.news.yahoo.com/rss/entertainment" 
    Dim feed As SyndicationFeed = GetFeed(feedUrl) 

    If feed = Nothing Then 

    End If 

它说, “运算符 '=' 没有为类型SyndicationFeed定义。”

+0

你确定你正在编译这个确切的代码吗?因为它接缝良好.... – nemesv

+0

请你可以发布代码打破?我看不到您发布的示例有任何问题。我觉得特别的是,显示给GetFeed的电话 - 我怀疑你正在做一些类似于'Boolean result = GetFeed(someUrl)'的操作,这将不起作用... –

+0

我最初没有发布错误的代码,因为我认为这是错误的做法。我现在发布了它。 – user1477388

回答

2

在VB.Net你需要使用is operatorcompare objects

因此改变你的条件:

If feed Is Nothing Then 

End If 
+0

感谢您的解决方案。这是做这件事的最好方法吗?我觉得可能有更好的方法。 – user1477388

+1

@ user1477388更好的方法来做什么?检查“Nothing”是唯一的方法。捕获异常并返回'Nothing'没有问题,但您应该考虑在某处记录什么是异常情况。 .Net中有许多函数,如果内部不满足某些条件,它将返回Nothing。 – nemesv

+1

@ user1477388如果您将其重命名为TryGetFeed,那么您可以更清楚地了解您的方法,这意味着它可能不会返回Feed。 – nemesv

1

我不是VB的专家,但你需要使用“是”,而不是“= ”。换句话说,将“如果feed = Nothing Then”替换为“If feed Is Nothing Then”。

+0

谢谢你,阿克顿。 – user1477388