我正在查看该方法,但无法理解为什么代码路径不返回值。我实际上是想从第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;
}
}
答案 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
块的范围之外。