【问题标题】:Implementing Try, Catch on Syndication Feed (RSS) Type实现 Try, Catch on Syndication Feed (RSS) 类型
【发布时间】:2012-08-25 06:50:00
【问题描述】:

我想创建一个 try catch,以便如果提要不存在或由于某种原因无法创建,它将返回 false 或 null,以便我可以测试变量并创建默认项。

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 类型定义运算符 '='。”

【问题讨论】:

  • 你确定你正在编译这个确切的代码吗?因为它接缝很好......
  • 请问你能发布破坏的代码吗?我看不出您发布的示例有任何问题。我特别认为,显示对 GetFeed 的调用 - 我怀疑你正在做类似 Boolean result = GetFeed(someUrl) 的事情,这不起作用......
  • 我最初并没有发布错误的代码,因为我认为这是错误的做法。我现在发布了。

标签: asp.net-mvc vb.net asp.net-mvc-3 rss


【解决方案1】:

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

所以将你的条件改为:

If feed Is Nothing Then

End If

【讨论】:

  • 感谢您的解决方案。这是最好的方法吗?我觉得可能有更好的方法。
  • @user1477388 更好的方法是什么?检查Nothing 这是唯一的方法。捕获异常并返回 Nothing 很好,但您应该考虑在某处记录异常情况。 .Net 中有很多函数,如果内部不满足某些条件,则返回 Nothing
  • @user1477388 如果您将方法重命名为 TryGetFeed,您可以更清楚地了解您的方法,这意味着它可能不会返回 Feed。
  • 谢谢,nemesv。你的两个 cmets 都很有帮助。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多