将数据存储在列表中而不丢失它们(C#)

Posted

技术标签:

【中文标题】将数据存储在列表中而不丢失它们(C#)【英文标题】:Storing data in a list without losing them (C#) 【发布时间】:2018-08-18 14:39:05 【问题描述】:

伙计们,我正在用 C# 创建一个程序,它将读取用户提供的收入和支出,并将它们存储在 2 个列表中。当请求时,程序必须显示存储在列表中的最小值和最大值。 IncomeOutgo 值可以根据用户的需要添加任意多次,每次添加一个值,程序都会返回菜单,该菜单有 3 个选项:添加新收入、添加新支出和显示最小值/最大值到目前为止。问题是,每次我尝试显示最小/最大值时,程序都会对我说:"System.InvalidOperationException: 'Sequence contains no elements',所以我认为列表中没有存储任何值。有人可以帮忙吗?谢谢!

class Class2

    List<double> income = new List<double>();
    List<double> outgo = new List<double>();
    Class1 c1 = new Class1();

   public void FunctionIncome()
    
        Console.Clear();
        Console.Write("Income: ");
        income.Add(Convert.ToDouble(Console.ReadLine()));
        c1.options();
    

    public void FunctionOutgo()
    
        Console.Clear();
        Console.Write("Outgo: ");
        outgo.Add(Convert.ToDouble(Console.ReadLine()));
        c1.options();
    

    public void functionMinMax()
    
            double minI = income.Min();
            double maxI = income.Max();
            double minO = outgo.Min();
            double maxO = outgo.Max();

            Console.WriteLine($"Minimum income: minI\nMaximum income: maxI\nMinimum outgo: minO\nMaximum outgo: maxO");
            Console.ReadKey();
            c1.options();
    

【问题讨论】:

你在哪里调用这些函数? FunctionIncomeFunctionOutgo 等.. 确保您的程序仅适用于Class2同一个对象实例。确保您的程序不会意外使用两个或更多 Class2 实例。 Class1Class2 是非常糟糕的类名称。还有Class1的定义在哪里?想想如何重构你的程序,让每条语句只写一次。 你尝试过静态列表吗? 【参考方案1】:

一个类代表对象的结构,但不应该在长期使用中存储实际数据并像数据库一样使用,在你的情况下,你将创建的类 2 的每个对象都将有一个新的双精度空列表。

你可能认为解决方案是只有一个类的固定实例,一个静态类或单例,这可能会起作用,但如果进程被杀死或你退出应用程序,你仍然会丢失所有数据,并且这绝对不是最佳实践

在这种情况下,您需要在其中存储数据以供长期使用,例如数据库、外部 xml 文件

【讨论】:

以上是关于将数据存储在列表中而不丢失它们(C#)的主要内容,如果未能解决你的问题,请参考以下文章

时间循环 - 将矢量数据存储在文件中而不覆盖

顶点动画存储在 FBX 文件中而不使用点缓存?

将类名存储在类变量中而不输入类名?

通过AsyncTask下载图像并将其显示在Imageview中而不存储在SD卡中

将数组传输到SQLite中,反之亦然,而无需循环,尤其是在ActionScript3中而不循环

如何合并两个 Git 存储库?