-2

我的问题真的很简单,但数小时的谷歌并没有为我(显然)独特的情况提供答案。问题是在以下代码中使用了未分配的变量

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SimpleBasicCompiler
{
    class Lines : System.Collections.IEnumerable
    {
        // Variables
        private ArrayList<string> lines;

        // Constructor
        public Lines()
        {
            lines = new ArrayList();
        }

        public void Add(string line)
        {
            lines.add(line);
        }

        // Iterator
        public System.Collections.IEnumerator GetEnumerator()
        {
            for (int i = 0; i < lines.length(); i++)
            {
                yield return lines[i];
            }
        }

        public void Print()
        {
            foreach (string line in lines)
            {
               XFormMain.SetStatus(line); // this line errors
               System.Console.Write(line); // this line dosn't
            }
        }

    } // End Class Lines
} // End namespace

我的问题是为什么?我无法更改声明或它使迭代器语法无效我什至尝试了以下

public void Print()
    {
        string lineB = "";
        foreach (string line in lines)
        {
           lineB = line; // now this line errors
           XFormMain.SetStatus(lineb); // and this line doesn't
           System.Console.Write(line); // this line doesn't in either situation
        }
    }

我想如果我知道为什么一条线有效而一条线我不能弄清楚但是......有什么想法吗?

4

3 回答 3

1

您发布的代码存在严重问题(即使没有该Print方法,也无法编译)。不ArrayList<T>存在类。我认为应该是List<string>这样。我还没有见过合适的用法ArrayList

你得到的错误可能是因为ArrayList它没有类型(这使得它成为一个糟糕的列表实现),但你却在向它询问字符串。编译器知道它可能包含任意对象,它会阻止您假设它只有字符串。

我想第二行没有出错的原因是因为编译器在遇到第一个错误时停止了。

于 2012-05-08T23:03:04.580 回答
0

这编译:

    class Lines : System.Collections.IEnumerable {
        // Variables
        private ArrayList lines;

        // Constructor
        public Lines() {
            lines = new ArrayList();
        }

        public void Add(string line) {
            lines.Add(line);
        }

        // Iterator
        public System.Collections.IEnumerator GetEnumerator() {
            for (int i = 0; i < lines.Count; i++) {
                yield return lines[i];
            }
        }

        public void Print() {
            string lineB = "";
            foreach (string line in lines)
            {
               lineB = line;
//               XFormMain.SetStatus(lineb);
               System.Console.Write(line); 
            }
        }
    }

有几个问题:

ArrayList 在 System.Collections,而不是 System.Collections.Generic

ArrayList 不是泛型,所以ArrayList<string>不正确

ArrayList.add 不存在

ArrayList.length() 不存在

这是一个可能有帮助的建议。先编写一点代码,然后看看它是否可以编译。从空的类声明开始。如果您的类是从另一个类派生的,则添加下一个,并存根基类或接口所需的任何方法以使其编译。一次添加一个方法的内部结构,并在完成每个方法时进行编译。经常像这样编译将避免由代码中的多个错误引起的奇怪问题。它还会阻止您及早进入错误的轨道,例如将 ArrayList 用作泛型。

于 2012-05-08T23:20:19.070 回答
0

尝试这个:

foreach (string line in lines.ToArray(typeof(string)))         
{
于 2012-05-08T22:58:44.280 回答