zak100 Ответов: 2

Как отобразить элементы arraylist в C#


Привет,
Я написал следующий код:
using System;
using System.Collections;

namespace ArrayList1
{
    class Program
    {
        ArrayList a1 = new ArrayList();

        static void Main(string[] args)
        {
            Program objProg = new Program();
            objProg.a1.Add(10);
            objProg.a1.Add(5.67);
            objProg.a1.Add("abcde");
            objProg.a1.Add('c');
            foreach(int i in objProg.a1)
            Console.WriteLine("i");
        }
    }
}

Я получаю исключение во время выполнения. Какое-нибудь тело, пожалуйста, направь меня.

Зульфи.

Что я уже пробовал:

Я сделал поиск в интернете, но код по-прежнему не работает.

2 Ответов

Рейтинг:
2

phil.o

Попробуй:

class Program
{
   static ArrayList a1 = new ArrayList();

   static void Main(string[] args)
   {
      a1.Add(10);
      a1.Add(5.67);
      a1.Add("abcde");
      a1.Add('c');
      foreach (object i in a1)
      {
         Console.WriteLine(i);
      }
   }
}

Основные моменты:
- Создание нового экземпляра класса программы в Main метод, позволяющий получить доступ к члену класса, не является хорошей практикой.
- a1 переменная класса должна быть статической, чтобы получить доступ к ней из статического метода.
- В самом деле foreach цикл, вы не можете объявить i в качестве int поскольку ваш arraylist содержит не только целочисленные значения. Общий тип, который может соответствовать целому числу, двойнику, строке и символу, - это object.
- Console.WriteLine("i"); будет печатать письмо на бумаге i вместо значения переменной i.


Рейтинг:
1

BillWoodruff

ArrayList-это старая функция, и она устарела [^] теперь, поскольку это очень дорогой (память, время доступа) способ создания коллекции объектов смешанных типов, и при его использовании ошибки не будут возникать во время компиляции.

Его использование тоже есть ... почти во всех случаях ... нарушение хороших принципов ООП/SOLID: на хорошей практике все эти биты данных вы помещаете в ArrayList означать что-то. Используйте класс (или структуру) для хранения ваших данных:

public class Data
{
   public int Number10 { set; get; }

   // ...
}
Или, если у вас должна быть структура, в которую вы можете добавлять несколько типов во время выполнения, более поздние версии C# предоставляют 'ExpandoObject [^] в системе.Динамическое пространство имен (и, более сложный 'DynamicObject):
dynamic person = new ExpandoObject();
person.Name = "John";
person.Surname = "Doe";
person.Age = 42;

// access by Key
int age = person.Age;

foreach (var kvp in person)
{
    Console.WriteLine($"{kvp.ToString()}");
}

// output in Console Window:
[Name, John]
[Surname, Doe]
[Age, 42]