【问题标题】:I have a list in one class and I'm having trouble accessing it from another class C#我在一个班级中有一个列表,但我无法从另一个班级 C# 访问它
【发布时间】:2020-04-25 16:49:00
【问题描述】:

我对 C# 还是很陌生,但我一直在努力解决一个问题。 我必须从菜单中为不同类型的食物创建类,并从控制台输入字段的值。问题是输入将包含每种食物类型的未知数量,因此我决定使用一个列表来存储不同类型的汤,在本例中为汤。

这是其中一种食物类别的代码:

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),我明白了

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

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

【问题讨论】:

  • 仅供参考,您不必将标题更改为“已解决”——如果有可接受的答案,那么我们知道您已经找到了解决问题的方法!

标签: c# list class


【解决方案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&lt;Soup&gt;。我个人建议您更改代码,使Soup 中的列表位于其他位置,以便Soup 的每个实例都不会有一个空的List&lt;Soup&gt;

【讨论】:

    【解决方案2】:

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

    您可以让 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();
    

    【讨论】:

      猜你喜欢
      • 2017-11-05
      • 1970-01-01
      • 2017-06-20
      • 1970-01-01
      • 1970-01-01
      • 2021-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多