已解决,我在一个类中有一个列表,但在从另一个类C#中访问它时遇到问题

问题描述 投票:0回答:2

我对C#来说还很陌生,我一直想解决一个问题,但现在已经解决了一段时间。我必须从菜单中为不同类型的食物创建类,并从控制台输入字段的值。问题在于输入将包含每种食物类型的未知计数,因此我决定使用一个List来存储不同类型的汤,在这种情况下为汤。

这是食物类别之一的代码:

public class Soup : Food
{
    public List<Soup> soups = new List<Soup>();
    public Soup(string name, double grams, decimal price) : base(name, grams, price)
    {
    }
}

下面的代码来自调用类。我正在接收来自用户的输入,但是我仍然想访问列表,因此可以向其中添加另一个元素。如果有人可以给我一些指导,以便从调用列表的Soup类中访问列表,以便我可以添加新元素,我将不胜感激。

int countProducts = int.Parse(Console.ReadLine());
char[] delimeters = new char[] { ',', ' ' };
CultureInfo cultures = new CultureInfo("en-US");
for (int i = 0; i < countProducts; i++)
{
    string[] inputProductInfo = Console.ReadLine().ToLower().Split(delimeters, StringSplitOptions.RemoveEmptyEntries).ToArray();
    if (inputProductInfo[0] == "soup")
    {
        Soup soup = new Soup(inputProductInfo[1], Convert.ToDouble(inputProductInfo[2], cultures), Convert.ToDecimal(inputProductInfo[3], cultures));
    }
}

基本,我需要将soup关联到soups列表,但是当我尝试以下代码时soups.Add(soup),我得到

名称“汤”在当前上下文中不存在错误。

编辑:如果有人在一段时间后遇到相同的问题,请保留此编辑。我检查了以下两个建议,两个都为我工作。但是,我选择了li223的第二种建议方式,因为它正是我想要的。更改代码的技巧也很有用。

c# list class access
2个回答
1
投票

您需要以某种方式引用其他对象的列表。您不能只输入成员的姓名。有两种方法可以做到这一点。

通常:您可以将Soup类中的List设置为静态,这将使您可以执行Soup.soups

public class Soup : Food
{
    public static List<Soup> soups = new List<Soup>();
}
var mysoup = new Soup(/*removed for brevity*/);
Soup.soups.Add(mysoup);

或者您可以在您的Soup类中创建实例并以这种方式访问​​该成员,这几乎就是您已经做的事情:

public class Soup : Food
{
    public List<Soup> soups = new List<Soup>();
}
var mysoupobj = new Soup(/*data*/);
mysoupobj.soups.Add(soup);

编辑:

[只需要注意,您的Soup类的每个实例也将包含其自己的List<Soup>。我个人建议您更改代码,以使Soup中的列表位于其他位置,以便Soup的每个实例都不会有空的List<Soup>


1
投票

可能〜静态成员方法最有意义,但是从问题描述中还不清楚。

您只需要使Soup从构造函数中添加到静态列表中,那么您就不必担心从外部添加它;添加创建的每个汤!

public class Soup : Food
{
    public static List<Soup> soups = new List<Soup>();
    public Soup(string name, double grams, decimal price) : base(name, grams, price)
    {
        soups.Add(this);
    }
}

然后通过以下方式访问您的列表:

Soup.soups.xxx();
© www.soinside.com 2019 - 2024. All rights reserved.