Задать вопрос
Millerish
@Millerish

C#: Как правильно прочитать и записать объекты в ArrayList?

Здравствуйте!

Как правильно прочитать и записать объекты в ArrayList?

String[] substrings = null;
ArrayList aL = new ArrayList();
public void toSay(string s)
        {
            Char delimiter = '|';
            substrings = s.Split(delimiter);
            ArrayList aaa = new ArrayList();
            for (int i =0; i < substrings.Length; i++)
            {
                aaa.Add(substrings[i]);
            }
            aL.Add(aaa);   
        }
        public void Click_OpenFile()
        {
            int counter = 0;
            string line;
            string result = form1.OpenFie();
            System.IO.StreamReader file = new System.IO.StreamReader(result);
            while ((line = file.ReadLine()) != null)
            {
                toSay(line);
                counter++;
            }
            file.Close();
            for (int i = 0; i < aL.Count; i++) {
                MessageBox.Show(aL[i].ToString());
            }
  • Вопрос задан
  • 668 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 2
@Free_ze
Пишу комментарии в комментарии, а не в ответы
Не стоит использовать ArrayListбез весомой на то необходимости. Поэтому компилятор не смог вас предупредить, что ArrayListсостоит из ArrayList'ов, в котором строки (двумерный массив строк), а не просто строк.

Вместо ArrayListнеобходимо использовать типизированный динамический массивList<string>.

public void Click_OpenFile()
{
    string fileName = form1.OpenFie();

    IList<string[]> aL = ParseFile(fileName);

    foreach (var line in aL)
    {
        // Снова собираем токены в строки
        MessageBox.Show(string.Join(" ", line));
    }
}

// Читаем файл и построчно парсим его
private IList<string[]> ParseFile(string fileName)
{
    if (string.IsNullOrEmpty(fileName))
    {
        throw new ArgumentNullException(nameof(fileName));
    }
    if (!File.Exists(fileName))
    {
        throw new ArgumentException($"There is no file {fileName}!");
    }

    string[] fileContent = File.ReadAllLines(result);
    var aL = new List<string[]>(fileContent.Length);
    foreach (var line in fileContent)
    {
        aL.Add(ParseString(line));
    }
    return aL;
}

// Разбиваем строки на токены
private string[] ParseString(string s)
{
    const char delimiter = '|';
    return s.Split(delimiter);
}
Ответ написан
Комментировать
@John_Nash
coder
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы