Visual Studio中的GetAsyncMethod表示并非所有代码路径都返回值

时间:2014-06-19 15:14:04

标签: c# asynchronous windows-8

我正在查看该方法,但无法理解为什么代码路径不返回值。我实际上是想从第9频道创建一个博客阅读器。只需按照应用程序进行操作即可。在学习编码时,我发现很难找到要做的项目。我一直在看视频和看书。如果有项目来检查源代码并弄清楚它们是如何工作的,那就更容易了。这就是这个计划的背景。在Visual Studio中,这是我所说的文件中唯一的错误。那个方法.GetFeedAsync:并非所有代码路径都返回一个值。这正是开发人员在视频中拥有它的方式,但由于它的年龄已经不再存在页面上的评论系统了。该系列列于here

     private async Task<FeedData> GetFeedAsync(string feedUriString)
        {
            SyndicationClient client = new SyndicationClient();
            Uri feedUri = new Uri(feedUriString);
            try
            {
                SyndicationFeed feed = await client.RetrieveFeedAsync(feedUri);
                FeedData feedData = new FeedData();

                if (feed.Title != null && feed.Title.Text != null)
                {
                    feedData.Title = feed.Title.Text;
                }
                if (feed.Subtitle != null && feed.Subtitle.Text != null)
                {
                    feedData.Description = feed.Subtitle.Text;
                }
                if (feed.Items != null && feed.Items.Count > 0)
                {
                    //use the date of the latest post as the last updated date
                    feedData.PubDate = feed.Items[0].PublishedDate.DateTime;
                    foreach (SyndicationItem item in feed.Items)
                    {
                        FeedItem feedItem = new FeedItem();
                        if (item.Title != null && item.Title.Text != null)
                        {
                            feedItem.Title = item.Title.Text;
                        }
                        if (item.PublishedDate != null)
                        {
                            feedItem.PubDate = item.PublishedDate.DateTime;
                        }
                        if (item.Authors != null && item.Authors.Count > 0)
                        {
                            feedItem.Author = item.Authors[0].Name.ToString();
                        }

                        if (feed.SourceFormat == SyndicationFormat.Atom10)
                        {
                            if (item.Content != null && item.Content.Text != null)
                            {
                                feedItem.Content = item.Content.Text;
                            }
                            if (item.Id != null)
                            {
                                feedItem.Link = new Uri("http://windowsteamblog.com" + item.Id);
                            }
                            else if (feed.SourceFormat == SyndicationFormat.Rss20)
                            {
                                if (item.Summary != null && item.Summary.Text != null)
                                {
                                    feedItem.Content = item.Summary.Text;
                                }

                                if (item.Links != null && item.Links.Count > 0)
                                {
                                    feedItem.Link = item.Links[0].Uri;
                                }
                            }
                            feedData.Items.Add(feedItem);

                        }

                    }
                    return feedData;
                }

            }
            catch (Exception)
            {

                return null;
            }
        }

2 个答案:

答案 0 :(得分:3)

您的return feedData在if语句中,try块可以成功执行而不会遇到return语句。

您应该将return语句移动到if语句之外(即,将其与下面的}交换)或者引入一个返回内容的else语句,具体取决于所需的行为。

        try
        {
           // lots of code emitted

            if (feed.Items != null && feed.Items.Count > 0)
            {
                // lots more code emitted 
            }

            return feedData;

        }

        try
        {
           // lots of code emitted

            if (feed.Items != null && feed.Items.Count > 0)
            {
                // lots more code emitted 

                return feedData;
            }
            else
            {
                return null;
            }

        }

应该足够了。

答案 1 :(得分:1)

if (feed.Items != null && feed.Items.Count > 0)

如果不满足上述条件,则不返回任何内容,因此返回错误消息。

您可能打算将return feedData;行置于此if块的范围之外。