You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 04:25:31