如何使一组对象对其他函数可见

时间:2018-01-07 07:36:44

标签: c# arrays global

在我当前的程序中,我正在构建一个对象数组然后填充它,但是我需要从同一个类中的另一个函数访问这个填充的数组。在C中我会通过使数组成为全局来实现这一点,但是C#中不存在全局变量,当我尝试使用“静态”参数时,它表示数组不能是静态的。

namespace FormsTest1
{
    public partial class Form1 : Form
    {
        public int AppCount;
        public static applications[] appList;

        public Form1() //Main Entry point of program
        {
            IEnumerable<int> apps = VolumeMixer.EnumerateApplications();
            AppCount = apps.Count();
            int i = 0;
            applications[] appList = new applications[AppCount];
            foreach (int app in apps)
            {
                appList[i] = new applications();
                appList[i].setProcessID(app);
                appList[i].populate();
                i++;
            }
            for (int j = 0; j < AppCount; j++) { ChannelSelect1.Items.Add(appList[j].Name); }
        }

        private void ChannelSelect1_SelectedIndexChanged(object sender, EventArgs e)
        {
            for (int k = 0; k < AppCount; k++)
            {
            if (ChannelSelect1.Text == appList[k].Name) //<-- This array is not the one I populate in Form1()
            { Channels[0] = appList[k].PID; }
        }
    }

    public class applications
    {
        public int PID;
        public string ProcessName;
        public string WindowName;
        public string Name;
        public string Path;

        public void setProcessID(int ID) { PID = ID; }

        public string getProcessName() { return ProcessName; }
        public string getWindowName() { return WindowName; }
        public string getName() { return Name; }
        public string getPath() { return Path; }

        public void populate()
        {
            //stuff
        }
    }
}   

我无法将数组传递给其他函数,因为它们是事件驱动的,我需要数组的索引能力。

如何在一个函数中声明和填充对象数组,然后在同一个类的另一个函数中使用该数组?

1 个答案:

答案 0 :(得分:4)

更改构造函数
applications[] appList = new applications[AppCount];

appList = new applications[AppCount];

您应该初始化您的实例字段,而不是创建新的本地字段。

顺便说一句:没有必要让数组保持静态。