为什么一行出错但另一行出错?

时间:2012-05-08 22:49:33

标签: c# compiler-errors

我的问题很简单但谷歌的数小时并没有产生我(显然)独特情况的答案。 问题是在以下代码中使用了未赋值的变量

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
        }
    }

我想如果我知道为什么一条线有效并且一条线不能解决它但是.....任何想法?

3 个答案:

答案 0 :(得分:1)

您发布的代码存在严重问题(即使没有Print方法也无法编译)。不存在ArrayList<T>类。那应该是List<string>我想。我从未见过适当使用ArrayList

你得到的错误可能是因为ArrayList是无类型的(这使得它成为一个糟糕的列表实现),但你要求它为字符串。编译器知道它可能包含任意对象,并且它阻止你假设它只有字符串。

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

答案 1 :(得分:0)

试试这个:

foreach (string line in lines.ToArray(typeof(string)))         
{

答案 2 :(得分: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不是Generic,因此ArrayList<string>不正确

ArrayList.add不存在

ArrayList.length()不存在

这是一个可能有所帮助的建议。首先编码,看看它编译。从空类声明开始。如果你的类从另一个继承而来,那就添加下一个,并删除基类或接口所需的任何方法以使其编译。一次添加一个方法的内部结构,并在完成每个方法时进行编译。通常这样编译可以避免代码中的多个错误导致的奇怪问题。它也会提前阻止您前往不正确的轨道,例如使用ArrayList作为通用。