I'm taking a basic course in C# programming, and this is a part of our assignment. Very new to programming so I feel more than a bit lost with this.
The assignment is to add an ArrayList
and insert strings from a file to this, which I hopefully have done with the code below:
Read ()
is a method in another class ( FileReader
) that reads the files from "info.txt"
and returns an ArrayList
.
The ArrayList
items are supposed to store the object items, although I'm not quite sure why I need two arrays?
The problem I have is: when you retrieve the "items" from the array, they have to be cast to a type, string
, (if I understand it correctly, otherwise they are returned as objects
?). How do I do that?
Can you cast the entire ArrayList
?
public PriceFlux () //Constructor
{
ArrayList items;
items = new ArrayList();
FileReader infoFile = new FileReader("info.txt");
items = infoFile.Read();
}
The files from the info.txt
looks approximately like this:
G&34&Kellogs K frukostflingor&Sverige&29.50&5/11/2005&29/10/2005&29/10/2006
Here is the FileReader Read()
method:
public ArrayList Read ()
{
ArrayList fileContent = new ArrayList ();
try
{
while (line != null)
{
fileContent.Add (line);
line = reader.ReadLine ();
}
reader.Close ();
}
catch
{
Console.WriteLine ("Couldn´t read from file.");
}
return fileContent;
}
Very grateful for suggestions on how to solve this.
You can use linq to do this easily:
This will cast all items to string
and return an IEnumerable<string>
. It will fail if any items can't be cast to a string
:
items.Cast<string>();
This will cast all items that can be to a string
and skip over any that can't:
items.OfType<string>();
You can access single elements in the ArrayList
doing a cast, for example...
string s = myArrayList[100] as string;
myArrayList.Remove("hello");
myArrayList[100] = "ciao"; // you don't need a cast here.
You can also iterate through all elements without a cast...
foreach (string s in myArrayList)
Console.WriteLine(s);
You can also use CopyTo
method to copy all items in a string array...
string[] strings = new string[myArrayList.Count];
myArrayList.CopyTo(strings);
You can create another List<string>
with all items in the ArrayList
. Since ArrayList
implements IEnumerable
you can call the List<string>
constructor.
List<string> mylist = new List<string>(myArrayList);
But this doesn't makes much sense... why you don't just use List<string>
directly? Using directly a List<string>
seems more useful to me, and is faster. ArrayList
still exists mostly for compatibility purposes since generics were introduced in version 2 of the language.
I just noticed that there may be an error in your code:
while (line != null)
{
fileContent.Add (line);
line = reader.ReadLine ();
}
Should be instead
for (;;)
{
string line = reader.ReadLine();
if (line == null)
break;
fileContent.Add(line);
}
在使用每个元素之前,您必须对其进行单独转换。
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.