Member 12675499 Ответов: 3

Как удалить элементы из списка массивов в C#


После удаления элементов из arraylist он не влияет на arraylist.
при извлечении элементов arraylist снова показываются удаляемые элементы.
Как решить эту проблему?

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

public class BaseEmployee
    {
        public int Id;
        public string Name;
    }

    public class Employee : BaseEmployee
    {
        public string Address;



        public Object Add()
        {

            Employee employeeDetail = new Employee();
            Console.Write("Employee Id:");
            employeeDetail.Id = int.Parse(Console.ReadLine());

            Console.Write("Employee Name:");
            employeeDetail.Name = Console.ReadLine();
            Console.Write("Employee Address:");
            employeeDetail.Address = Console.ReadLine();
            return employeeDetail;

        }

        static void Main(string[] args)
        {

            ArrayList arraylist = new ArrayList();
          


            Employee employeeDetails = new Employee();

            bool p = true;

            while (p)
            {

                Console.WriteLine("Employee Record Management System\n");
                Console.WriteLine("\n1)Add");
                Console.WriteLine("\n2)Edit");
                Console.WriteLine("\n3)Delete");
                Console.WriteLine("\n4)Dispaly");
                Console.WriteLine("\n5)Exit");
                Console.Write("\n Select opertaion:");
                int Option = int.Parse(Console.ReadLine());

                switch (Option)
                {
                    case 1:
                        arraylist.Add(employeeDetails.Add());

                        break;


                    case 4:
                        foreach (Object obj in arraylist)
                        {

                            Employee emp = obj as Employee;
                            Console.Write("{0}\t\t{1}\t\t{2}", emp.Id, emp.Name, emp.Address);
                            Console.Write("\n");
                            //Console.WriteLine(obj);
                        }


                        break;
            case 3:Console.Write("Enter  Employee Id:");
                        int EId = int.Parse(Console.ReadLine());
                        foreach(Object obj in arraylist)
                        {
                            Employee emp = obj as Employee;
                            if(EId==emp.Id)
                            {

                                arraylist.Remove(emp.Id);
                                arraylist.Remove(emp.Name);
                                arraylist.Remove(emp.Address);
                               

                            }
                        }

                          break;



                }

            }
        }

    }
}

3 Ответов

Рейтинг:
24

Mehdi Gholam

Вы должны удалить object не свойства объекта :

...
          arraylist.Remove(emp);
...


F-ES Sitecore

Я согласен, но не уверен, что вам понадобится arraylist.Remove(obj), а не "emp". Вам также понадобится "break;" после строки Remove.

Mehdi Gholam

Предположительно emp не является нулевым после приведения, так что вы в порядке в блоке if, Но да!

CPallini

5.

Mehdi Gholam

Ура!

Рейтинг:
2

Alfonso Gag.

Я предлагаю вам использовать List< Employee & gt; Вместо ArrayList.
Вы будете избегать использования объекта (каждый раз бросая его), и ваш код будет легче читать.
Кроме того вы сможете использовать метод RemoveAll:

arraylist. RemoveAll(emp => emp.Id == EId);

Я переписал ваш фрагмент кода, чтобы вы могли оценить мой совет:

public class BaseEmployee
    {
        public int Id;
        public string Name;
    }
 
    public class Employee : BaseEmployee
    {
        public string Address;

        public static Employee Add()
        {
 
            var employeeDetail = new Employee();
            Console.Write("Employee Id:");
            employeeDetail.Id = int.Parse(Console.ReadLine());
 
            Console.Write("Employee Name:");
            employeeDetail.Name = Console.ReadLine();
            Console.Write("Employee Address:");
            employeeDetail.Address = Console.ReadLine();
            return employeeDetail;
 
        }
 
        static void Main(string[] args)
        {

            var arraylist = new List<Employee>();
          
            //Employee employeeDetails = new Employee();
 
            bool p = true;
 
            while (p)
            {
 
                Console.WriteLine("Employee Record Management System\n");
                Console.WriteLine("\n1)Add");
                Console.WriteLine("\n2)Edit");
                Console.WriteLine("\n3)Delete");
                Console.WriteLine("\n4)Dispaly");
                Console.WriteLine("\n5)Exit");
                Console.Write("\n Select operation:");
                int Option = int.Parse(Console.ReadLine());
 
                switch (Option)
                {
                    case 1:
                        arraylist.Add(Employee.Add());
 
                        break;
 

                    case 4:
                        foreach (Employee emp in arraylist)
                        {
 
                            //Employee emp = obj as Employee;
                            Console.Write("{0}\t\t{1}\t\t{2}", emp.Id, emp.Name, emp.Address);
                            Console.Write("\n");
                            //Console.WriteLine(obj);
                        }
 

                        break;
                    case 3:
                        Console.Write("Enter  Employee Id:");
                        int EId = int.Parse(Console.ReadLine());
                        
                        arraylist.RemoveAll(emp => emp.Id == EId);
                        
                        break;
                }
 
            }
        }
 
    }


Пока


Рейтинг:
1

#realJSOP

Если вы собираетесь изменить список, вы не можете сделать это внутри foreach петля.

Мой совет-использовать linq, чтобы найти его, а затем удалить, если он будет найден.

var found = arraylist.Where(x=>x.Id == EId).FirstOrDefault();
if (found != null)
{
    arraylist.Remove(found);
}