将产品列表文件添加到 C# 集合中

Adding a product list file into a C# collection

所以我正在尝试将一个虚构的产品列表添加到我的程序中以进行分配。在我的原型中,我将列表硬编码如下

public static List<Product> Products = new List<Product>()
        {  
            new Product(1001, "Apple", 49, 43, new DateTime(2022, 01, 25)),
            new Product(1002, "Banana", 60, 32, new DateTime(2022, 01, 25)),
            new Product(1003, "Grapes", 99, 15, new DateTime(2022, 01, 28)),
            new Product(1004, "Melon", 110, 14, new DateTime(2022, 02, 01)),
            new Product(1005, "Strawberries", 119, 22, new DateTime(2022, 01, 28)),
            new Product(1006, "Orange", 45, 31, new DateTime(2022, 01, 25)),
            new Product(1007, "Pineapple", 125, 9, new DateTime(2022, 02, 01))
        }

我现在尝试将其转换为使用文件。我在文件中的信息如下:

1001,"Apple",49,43,new DataTime(2022, 01, 25)
1002,"Banana",60,32,new DataTime(2022, 01, 25)
1003,"Grapes",99,15,new DataTime(2022, 01, 28)
1004,"Melon",110,14,new DataTime(2022, 02, 01)
1005,"Strawberries",119,22,new DataTime(2022, 01, 28)
1006,"Orange",45,31,new DataTime(2022, 01, 25)
1007,"Pineapple",125,9,new DataTime(2022, 02, 01)

如何让程序读取此 products.txt 文件并自行创建产品列表?抱歉,我是 File.IO.

的新手

非常感谢

可能有多种方法可以做到这一点,例如,如果您坚持使用文本文件,我建议您从该行的末尾删除新的 DateTime(x,y,z) 并替换它直接使用 x、y、z,并删除名称周围的引号,除非像这样需要。

然后您可以读取文件的所有行,并在遍历这些行时创建对象的新实例。假设我们将文件保存为 products.txt,您的代码将如下所示:

public List<Product> GetProductsFromFile()
{
    List<Product> products = new List<Product>();

    string[] allLines = File.ReadAllLines("products.txt");
    foreach (var line in allLines)
    {
        string[] values = line.Split(",");
        products.Add(new Product(int.Parse(values[0]), values[1], int.Parse(values[2]), int.Parse(values[3]), new DateTime(int.Parse(values[4]), int.Parse(values[5]), int.Parse(values[6]))));
    }

    return products;
}

使用文本文件可能有更简洁的方法,但我希望您能看到代码变得如此丑陋。另请注意,我没有处理输入中的任何错误,因此您仍需要做更多工作才能将此功能最终确定为您可以真正使用的功能。

相反,我建议使用 JSON 文件,它可以直接反序列化到您的列表中,而无需我们自己解析...

我不知道你有Productclass,但我是这样写的:

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int FirstInteger { get; set; }
    public int SecondInteger { get; set; }
    public DateTime DateOfSomething { get; set; }
}

您将使用的文件如下所示:

[{
    "Id": 1001,
    "Name": "Apple",
    "FirstInteger": 49,
    "SecondInteger": 43,
    "DateOfSomething": "2022-01-25T00:00:00"
},
{
    "Id": 1002,
    "Name": "Banana",
    "FirstInteger": 60,
    "SecondInteger": 32,
    "DateOfSomething": "2022-01-25T00:00:00"
},
{
    "Id": 1003,
    "Name": "Grapes",
    "FirstInteger": 99,
    "SecondInteger": 15,
    "DateOfSomething": "2022-01-28T00:00:00"
},
{
    "Id": 1004,
    "Name": "Melon",
    "FirstInteger": 110,
    "SecondInteger": 14,
    "DateOfSomething": "2022-02-01T00:00:00"
},
{
    "Id": 1005,
    "Name": "Strawberries",
    "FirstInteger": 119,
    "SecondInteger": 22,
    "DateOfSomething": "2022-01-28T00:00:00"
},
{
    "Id": 1006,
    "Name": "Orange",
    "FirstInteger": 45,
    "SecondInteger": 31,
    "DateOfSomething": "2022-01-25T00:00:00"
},
{
    "Id": 1007,
    "Name": "Pineapple",
    "FirstInteger": 125,
    "SecondInteger": 9,
    "DateOfSomething": "2022-02-01T00:00:00"
}]

假设此文件名为 jsonFile.json,将其加载为您的列表的方式将如此简单:

List<Product> productsFromFile = JsonConvert.DeserializeObject<List<Product>>(File.ReadAllText("jsonFile.json"));

您不想在输入文件中使用 new DataTime 甚至 new DateTime。转换为

1001,"Apple",49,43,2022, 01, 25
1002,"Banana",60,32,2022, 01, 25
1003,"Grapes",99,15,2022, 01, 28
1004,"Melon",110,14,2022, 02, 01
1005,"Strawberries",119,22,2022, 01, 28
1006,"Orange",45,31,2022, 01, 25
1007,"Pineapple",125,9,2022, 02, 01

然后使用 nuget.org 中可用的众多 CVS(Comma-Separated 值)实现之一。 您的日期将分为年月日,因此您需要在阅读后新建一个 DateTime。