Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过文件访问列表?_C# - Fatal编程技术网

C# 通过文件访问列表?

C# 通过文件访问列表?,c#,C#,我对java非常熟悉,似乎不知道如何在某种意义上使用全局变量 如何在on selectedIndexChanged方法中访问list foodSource?我想让它这样当一个项目被选中,它的价格显示在一个单独的标签 public partial class Form1 : Form { public Form1() { InitializeComponent(); initFood(); } private void initFo

我对java非常熟悉,似乎不知道如何在某种意义上使用全局变量

如何在on selectedIndexChanged方法中访问list foodSource?我想让它这样当一个项目被选中,它的价格显示在一个单独的标签

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        initFood();
    }

    private void initFood()
    {
        var foodSource = new List<Food>();

        foodSource.Add(new Food { name = "Pizza", price = 10 });
        foodSource.Add(new Food { name = "Burger", price = 15 });
        foodSource.Add(new Food { name = "Chips", price = 5 });
        this.menu.DataSource = foodSource;
        menu.DisplayMember = "name";
    }

    private void menu_SelectedIndexChanged(object sender, EventArgs e)
    {


    }

    private void label1_Click(object sender, EventArgs e)
    {

    }
}
公共部分类表单1:表单
{
公共表格1()
{
初始化组件();
食物();
}
私人食品
{
var foodSource=new List();
添加(新食品{name=“Pizza”,价格=10});
添加(新食品{name=“Burger”,价格=15});
添加(新食品{name=“Chips”,价格=5});
this.menu.DataSource=foodSource;
menu.DisplayMember=“name”;
}
私有无效菜单\u选择的索引已更改(对象发送方,事件参数e)
{
}
私有无效标签1_单击(对象发送方,事件参数e)
{
}
}

您可以投射一个
发送者
对象,该对象应该正是持有您的数据源的人。但从您的示例来看,不清楚您为什么需要访问该列表?
EventArgs e
没有提供所有必要的数据吗

您可以投射一个
发送者
对象,该对象应该正是持有您的数据源的人。但从您的示例来看,不清楚您为什么需要访问该列表?
EventArgs e
没有提供所有必要的数据吗

您的最佳选择是让foodSource成为
Form1
类的成员:

public partial class Form1 : Form
{
    private List<Food> foodSource;
    public Form1()
    {
        InitializeComponent();
        initFood();
    }

    private void initFood()
    {
        this.foodSource = new List<Food>();

        this.foodSource.Add(new Food { name = "Pizza", price = 10 });
        this.foodSource.Add(new Food { name = "Burger", price = 15 });
        this.foodSource.Add(new Food { name = "Chips", price = 5 });
        this.menu.DataSource = foodSource;
        menu.DisplayMember = "name";
    }
}

您最好的选择是让foodSource成为
Form1
类的成员:

public partial class Form1 : Form
{
    private List<Food> foodSource;
    public Form1()
    {
        InitializeComponent();
        initFood();
    }

    private void initFood()
    {
        this.foodSource = new List<Food>();

        this.foodSource.Add(new Food { name = "Pizza", price = 10 });
        this.foodSource.Add(new Food { name = "Burger", price = 15 });
        this.foodSource.Add(new Food { name = "Chips", price = 5 });
        this.menu.DataSource = foodSource;
        menu.DisplayMember = "name";
    }
}
您的
List()
用作名为
菜单的控件的数据源

因此,您可以始终检索访问数据源的同一列表作为
列表

private void menu\u SelectedIndexChanged(对象发送方,事件参数e)
{
列表源=菜单。数据源为列表;
source.foo();
}
不需要有“全局变量”

更深入的解释:当您编写
var foodSource=new List()时您正在堆中分配内存区域以保留列表数据。对该区域的引用被分配给名为foodSource的局部变量,最后控件的DataSource属性被分配给同一引用。但是,作为foodSource,当代码从initFood方法退出时,在堆栈上创建的局部变量将被丢弃,但堆上的内存区域仍在使用中,因为DataSource属性保留对该区域的引用。当您的代码到达SelectedIndexChanged事件处理程序时,您只需使用,就可以对存储原始
列表的同一内存区域进行有效引用。

您的
列表()
用作名为
菜单的控件的数据源。

因此,您可以始终检索访问数据源的同一列表作为
列表

private void menu\u SelectedIndexChanged(对象发送方,事件参数e)
{
列表源=菜单。数据源为列表;
source.foo();
}
不需要有“全局变量”


更深入的解释:当您编写
var foodSource=new List()时您正在堆中分配内存区域以保留列表数据。对该区域的引用被分配给名为foodSource的局部变量,最后控件的DataSource属性被分配给同一引用。但是,作为foodSource,当代码从initFood方法退出时,在堆栈上创建的局部变量将被丢弃,但堆上的内存区域仍在使用中,因为DataSource属性保留对该区域的引用。当您的代码到达SelectedIndexChanged事件处理程序时,您只需使用,就可以对存储原始
列表的同一内存区域进行有效引用。

为什么不像java中那样将其设置为私有类级字段?在C中没有全局变量。您最多只能得到一个。@user3042332您是否尝试过调试菜单\u SelectedIndexChanged,并查看作为发送方和e得到了什么?发件人被装箱在对象中,它被认为是你的食物对象。为什么你不把它变成一个私人类的字段,就像你在java中那样?没有C语言中的全局变量。您最多只能得到一个。@user3042332您是否尝试过调试菜单\u SelectedIndexChanged,并查看作为发送方和e得到了什么?发件人被装箱在对象,它被认为是你的食物对象。
private void menu_SelectedIndexChanged(object sender, EventArgs e)
{
    List<Food> source = menu.DataSource as List<Food>;
    source.foo();
}