如何在C#中通过函数调用修改另一个函数内的List集合?
解决员工集合跨方法访问的问题
你的问题核心在于变量作用域:Zaposlenici函数里的imena是局部变量,仅在该函数内部有效,且每次调用Zaposlenici都会重新创建新集合,之前添加的员工数据会直接丢失。
要让多个函数共享同一个员工集合,最简单的方案是把集合升级为类的静态字段,让所有静态方法都能操作同一个集合实例。以下是修改后的完整代码:
using System; using System.Collections.Generic; class ZaposleniciManager { // 将员工集合设为类的静态字段,所有静态方法共享同一个实例 private static List<string> imena = new List<string> { "Marko","Ivan","Miljenko","Josip","Luka"}; public static void Zaposlenici() { Console.WriteLine("Zaposlenici u firmi:"); foreach (var ime in imena) { Console.WriteLine(ime); } Console.WriteLine("--------------------"); } public static void Izbornik() { Console.WriteLine("1. Zaposlenici u firmi"); Console.WriteLine("2. Dodaj novog zaposlenika"); Console.WriteLine("3. Izbrisite zaposlenika"); Console.WriteLine("0. Izlaz"); Console.WriteLine("--------------------"); Console.Write("Odaberite opciju: "); } public static void DodajZaposlenika() { // 直接操作共享的imena集合添加新员工 imena.Add("Francis"); imena.Add("Matea"); Console.WriteLine("Dodali ste nove zaposlenike!"); // 也可以改成用户输入式添加: // Console.Write("Unesite ime novog zaposlenika: "); // string novoIme = Console.ReadLine(); // imena.Add(novoIme); // Console.WriteLine($"Zaposlenik {novoIme} je dodan!"); Console.WriteLine("--------------------"); } public static void Opcije() { while (true) { int opcija; // 增加输入校验,避免非数字输入报错 if (!int.TryParse(Console.ReadLine(), out opcija)) { Console.WriteLine("Molimo unesite validan broj!"); Console.WriteLine("--------------------"); Izbornik(); continue; } switch (opcija) { case 1: Zaposlenici(); Izbornik(); break; case 2: DodajZaposlenika(); Izbornik(); break; case 3: Console.WriteLine("Funkcija za brisanje još nije implementirana!"); Console.WriteLine("--------------------"); Izbornik(); break; case 0: Console.WriteLine("Hvala na korištenju programa!"); return; default: Console.WriteLine("Ne postoji ta opcija, pokušajte ponovno!"); Console.WriteLine("--------------------"); Izbornik(); break; } } } static void Main(string[] args) { Console.WriteLine("Pozdrav!"); Console.WriteLine("---------------"); Izbornik(); Opcije(); } }
关键改动说明:
- 将
List<string> imena从Zaposlenici函数内部移到类级别,声明为private static,确保仅当前类方法可访问,同时所有静态方法共享同一个持久化的集合。 - 修改
Zaposlenici函数,直接遍历共享的imena集合,不再每次创建新集合。 DodajZaposlenika函数现在可以直接调用imena.Add()添加新员工,操作的是同一个不会丢失数据的集合。- 完善了
Opcije函数,添加循环让菜单持续显示直到用户选择退出,同时增加输入校验和无效选项处理。
内容的提问来源于stack exchange,提问作者Capser
相关产品推荐
相关产品推荐

