c# - 索引超出范围

时间:2013-08-12 13:44:48

标签: c# asp.net

我正试图从推特上获取推文。

将所有数据存储到数据库中,然后将其传递给Siebel。

我收到错误:

  

指数超出范围

以下是代码:

 public void Call_Tweet_Update()
    {
        var service = new TwitterService(Consumer_Key, Consumer_Secret);
        service.AuthenticateWith(Access_Token, AccessToken_Secret);

        var tweets = service.ListTweetsOnHomeTimeline(new ListTweetsOnHomeTimelineOptions { Count = 200 });
        string[] twt_id = new string[50];
        long id = 0;
        int i = 0;
        int increment = 0;
        string twtid;
        string screenname;

        foreach (var tweet in tweets)
        {
            if (tweet.InReplyToStatusId.ToString() != "")
            {
                if ((tweet.User.ScreenName == "IIPL_LTD") || (tweet.Text.StartsWith("@IIPL_LTD")))
                {
   string replyid = tweet.InReplyToStatusId.ToString();

    while (replyid != "")
    {
        if (i == 0)
        {
            twt_id[i] = tweet.Id.ToString();
        }
        id = Convert.ToInt64(replyid);
        twtid = tweet.Id.ToString();

        i = i + 1;
        twt_id[i] = twtid;
        replyid = tweet.InReplyToStatusId.ToString();//Here I get an error
        increment = increment + 1;
    }
  }
}

有什么想法吗?提前谢谢。

1 个答案:

答案 0 :(得分:6)

您要求提供200条推文,并且您只将字符串数组的大小调整为50,因此它会在处理的第51条推文上爆炸。

这段代码就是问题:

var tweets = service.ListTweetsOnHomeTimeline(
    new ListTweetsOnHomeTimelineOptions { Count = 200 });
string[] twt_id = new string[50];

更改您请求的推文数量或更改字符串数组的大小以匹配请求的推文数量。

更新:

至少可以说,这种逻辑适得其反:

if (i == 0)
{
    twt_id[i] = tweet.Id.ToString();
}
id = Convert.ToInt64(replyid);
twtid = tweet.Id.ToString();

i = i + 1;
twt_id[i] = twtid;

您正在将相同的推文添加到字符串数组中的两个不同索引,将代码更改为:

twt_id[i] = tweet.Id.ToString();
i = i + 1;

replyid = tweet.InReplyToStatusId.ToString();的目的是什么,您在每次循环迭代时都设置一个值,但不在任何地方使用它,与id = Convert.ToInt64(replyid);increment = increment + 1;相同。您肯定需要清理代码中未使用的逻辑。