从ArrayList中检索对象 - 强制转换为类型?

时间:2011-11-19 12:07:08

标签: c# .net

我正在学习C#编程的基础课程,这是我们任务的一部分。 对编程很新,所以我觉得这有点不知所措。

分配是添加一个ArrayList并将文件中的字符串插入到此中,我希望以下代码完成:

  • Read ()是另一个类(FileReader)中的一种方法,它从"info.txt"读取文件并返回ArrayList

  • ArrayList项应该存储对象项,虽然我不太清楚为什么我需要两个数组?

我遇到的问题是:当您从数组中检索“items”时,必须将它们强制转换为类型string,(如果我理解正确,否则它们将返回为{{1} }}?)。我该怎么做?

你能投出整个objects吗?

ArrayList

public PriceFlux () //Constructor { ArrayList items; items = new ArrayList(); FileReader infoFile = new FileReader("info.txt"); items = infoFile.Read(); } 中的文件大致如下:

  

G& 34& Kellogs K frukostflingor& Sverige& 29.50& 5/11 / 2005& 29/10 / 2005& 29/10/2006

以下是info.txt方法:

FileReader Read()

非常感谢有关如何解决这个问题的建议。

3 个答案:

答案 0 :(得分:5)

您可以使用linq轻松完成此操作:

这会将所有项目投放到string并返回IEnumerable<string>。如果任何项目无法转换为string

,则会失败
items.Cast<string>();

这会将所有可以投放到string的项目投放,并跳过任何不能投放的项目:

items.OfType<string>();

答案 1 :(得分:1)

您可以访问ArrayList进行演员表单中的单个元素,例如......

string s = myArrayList[100] as string;
myArrayList.Remove("hello");
myArrayList[100] = "ciao"; // you don't need a cast here.

你也可以在没有演员的情况下迭代所有元素......

foreach (string s in myArrayList)
    Console.WriteLine(s);

您还可以使用CopyTo方法复制字符串数组中的所有项目......

string[] strings = new string[myArrayList.Count];
myArrayList.CopyTo(strings);

您可以使用List<string>中的所有项目创建另一个ArrayList。 由于ArrayList实现IEnumerable,您可以调用List<string>构造函数。

List<string> mylist = new List<string>(myArrayList);

但这没有多大意义......为什么你不直接使用List<string>? 直接使用List<string>对我来说似乎更有用,并且速度更快。 ArrayList仍然存在,主要是出于兼容性目的,因为在该语言的第2版中引入了泛型。

我刚注意到您的代码中可能存在错误:

    while (line != null)
    {   
        fileContent.Add (line);
        line = reader.ReadLine ();
    }

应该是

    for (;;)
    {   
        string line = reader.ReadLine();
        if (line == null)
            break;
        fileContent.Add(line);
    }

答案 2 :(得分:0)

在使用之前,您可以自行投射每个元素。