C#foreach超出范围

时间:2013-05-17 14:11:16

标签: c# arrays

由于某些原因,我的数组summarysubjectdate收到use of unassigned local variable错误。有谁知道最近发生了什么?

    int count = 0;
    string[] summary;
    string[] subject;
    string[] date;

    foreach (SyndicationItem item in feed.Items)
    {
        subject[count] = item.Title.Text;
        date[count] = item.PublishDate.DateTime.ToString();

        summary[count] = item.Summary.Text;
        list.InnerHtml += "<a href=\"#\" onclick\"showArticle(" + count + ");\"><li id=\"post" + count + "\"><b>" + subject[count] + "</b><br>" +
           "<p id=\"posted-date\">Posted on: " + date[count] + "</p>" + "</li></a>";
        count++; 
    } 

5 个答案:

答案 0 :(得分:7)

您需要将数组初始化为特定大小,例如:

string[] summary = new string[feed.Items.Count()];

或者,如果您不了解或不关心数组的长度,则可以使用List<String>而不是数组。在您的情况下,列表实际上更受欢迎,因为Count()扩展方法会在循环之前不必要地枚举feed.Items

答案 1 :(得分:2)

您永远不会为数组赋值,您只能通过其索引器访问该数组,即使您从未创建过该数组。你可以这样初始化它们:

string[] summary = new string[feed.Items.Count];
string[] subject = new string[feed.Items.Count];
string[] date = new string[feed.Items.Count];

答案 2 :(得分:2)

它们不是初始化。您应该完成以下声明:

string[] summary = new string[feed.Items.Count];
string[] subject = new string[feed.Items.Count];
string[] date = new string[feed.Items.Count];

答案 3 :(得分:2)

您需要先初始化数组才能使用它们,如下所示:

string[] summary = new string[length];

但是,在这种情况下,您事先不知道长度,因为feed.ItemsIEnumerable<SyndicationItem>,因此您无法直接获取项目数(您可以使用{{1}但是它会让你多次枚举这个集合,这通常是不推荐的。)

更好的方法是使用列表而不是数组:

.Count()

答案 4 :(得分:0)

以前的答案已经正确地确定您需要使用数组的大小初始化数组变量。要考虑为什么这是必要的,要意识到在foreach循环开始时,程序不知道这些数组将占用多少内存。我不可能说内存summary[count]指向哪里!