我正在学习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()
非常感谢有关如何解决这个问题的建议。
答案 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)
在使用之前,您可以自行投射每个元素。