【发布时间】:2012-05-24 21:22:33
【问题描述】:
我在 WPF .NET 4.0 C# 应用程序中使用 TweetSharp 并使用经过身份验证的 Twitter 服务对象。 我在遍历关注者列表以检索每个个人资料时遇到问题。我正在使用以下代码:
TwitterCursorList<TwitterUser> followers = twitterService.ListFollowersOf(userID, -1);
while (followers != null)
{
foreach (TwitterUser follower in followers)
{
//Do something with the user profile here
}
followers = twitterService.ListFollowersOf(userID, (long)followers.NextCursor);
}
当我对自己的帐户使用此功能时,我发现了一种奇怪的行为,截至本文撰写时,该帐户已拥有 1271 位关注者。第一次运行代码时,我得到了一个包含 100 个关注者的列表,在下一次 ListFollowersOf 调用中,关注者为空,循环结束。
这是奇怪的部分:如果我再次运行此代码,无论是在同一个应用程序实例中,还是如果我停止 Visual Studio 并重新启动,没关系,我会得到一个额外的 ieration 并且现在我得到了 200 名追随者。如果我再次使用此技巧,现在我会在获得空值之前获得 300 个关注者,依此类推。我重复了很多次,直到一次调用上述代码返回所有 1271 个关注者。
真正奇怪的是它最终会重置。我认为这与 Twitter API 限制重置时间有关,但我尚未验证。我会看看这是否与 API 重置一致。一旦重置发生,我只会获得 100 个关注者,然后是 200 个,依此类推。
我查看了 TweetSharp 单元测试和以下帖子,但它们对我不起作用:
【问题讨论】:
-
你试过
while (followers.NextCursor != null)吗?当followers为null时,您的while 循环停止,而您链接的问题中的其他示例在NextCursor为null时停止。 -
我有。 follower.NextCursor 返回一个 long?,问题是一旦 follower 变为 null(确实如此,如上所述),我会抛出一个 null 引用异常。
-
tests provided with the source 之一检查
NextCursor是否为null并且您将其转换为 long,所以它看起来确实是某种参考(我没有代码来检查它)。这是检查:Assert.IsNotNull(followers.NextCursor);您仍然可以检查followrs是否为null,如果它是null,请不要引用它,但看起来您的while 循环应该一直持续到NextCursor是null...至少从其他示例中看起来是这样的。 -
我最初尝试不转换为 long 但 VS 抛出编译器错误“无法从 'long 转换?' '长'”。我还收到另一个编译器错误“'TweetSharp.TwitterService.ListFollowersOf(int, long)' 的最佳重载方法匹配有一些无效参数”。
-
如果
NextCursor可以检查null,它要么是引用类型,要么是可以为空的值类型。值类型,如long,不能是null,除非字段/属性/变量被声明为可为空(例如long?)。如果该方法需要long,则无论它是引用类型还是可为空的long?,您都必须将NextCursor强制转换为long。
标签: c# .net twitter cursor tweetsharp