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