gpt4 book ai didi

c# - 从 CSV 文件读取到对象列表

转载 作者:太空宇宙 更新时间:2023-11-03 19:47:20 24 4
gpt4 key购买 nike

我需要读取这个 CSV 文件并将其转换为 List<Vehicle>对象(汽车和自行车),第一行必须被忽略,第三个值是对象的类型:

Name price typeOfVehicle Horsepower NumberOfPedals
Audi,100000,Car,500,
BMW,20000,Car,300
Abici,1000,Bicycle,,2
Atala,2000,Bicycle,,2

到目前为止我的代码:

abstract class Vehicle
{
public string Name { get; set; }
public int Price { get; set; }
}

class Car : Vehicle
{
public int Horsepower { get; set; }
}

class Bicycle : Vehicle
{
public int NumberOfPedals { get; set; }
}

static class Offers
{
public List<Vehicle> itemlist = new List<Vehicle>();
public static void readfromfile()
{
var lines = System.IO.File.ReadAllLines("C:\\Offers.csv");

foreach (string item in lines)
{
var values = item.Split(',');
//need to check which type of vehicle is it
if (values[2] == "Car")
{
itemlist.Add(new Car()
{
Name = values[0],
Price = int.Parse(values[1]),
Horsepower = int.Parse(values[3])
});
}
else if (values[2] == "Bicycle")
{
itemlist.Add(new Bicycle()
{
Name = values[0],
Price = int.Parse(values[1]),
NumberOfPedals = int.Parse(values[3])
});
}

}
}
}

我想从 CSV 文件中读取,读取时我需要检查每一行第三个值是汽车还是自行车。如果它是一辆汽车,那么我创建汽车对象(并将所有值赋予属性)并将其放入 Vehicles 列表中,自行车也是如此。

我收到关于 itemlist 的错误:

an object reference is required for the nonstatic field 'Offers.itemlist

最终解决方案:

abstract class Vehicle
{
public string Name { get; set; }
public int Price { get; set; }
}

class Car : Vehicle
{
public int Horsepower { get; set; }
}

class Bicycle : Vehicle
{
public int NumberOfPedals { get; set; }
}

static class Offers
{
public static List<Vehicle> itemlist = new List<Vehicle>();
public static void readfromfile()
{
var lines = System.IO.File.ReadAllLines("C:\\Offers.csv").Skip(1).TakeWhile(t => t != null);

foreach (string item in lines)
{
var values = item.Split(',');
//need to check which type of vehicle is it
if (values[2] == "Car")
{
itemlist.Add(new Car()
{
Name = values[0],
Price = int.Parse(values[1]),
Horsepower = int.Parse(values[3])
});
}
else if (values[2] == "Bicycle")
{
itemlist.Add(new Bicycle()
{
Name = values[0],
Price = int.Parse(values[1]),
NumberOfPedals = int.Parse(values[3])
});
}

}
}
}

最佳答案

您做错的一件事是您将“item”类型的对象添加到 itemlist 而不是您在上面的行中声明的汽车或自行车。

发现的另一个问题是,最初您的列表声明中没有 static 修饰符。没有它,您需要一个类的实例(即不是静态的)。要使此类可实例化,您需要从类及其所有字段、属性和方法中删除静态修饰符。

https://learn.microsoft.com/en-us/dotnet/articles/csharp/programming-guide/classes-and-structs/static-classes-and-static-class-members

static class Offers
{
public static List<Vehicle> itemlist = new List<Vehicle>();
public static void readfromfile()
{
var lines = System.IO.File.ReadAllLines("C:\\Offers.csv");

foreach (string item in lines)
{
var values = item.Split(',');
//need to check which type of vehicle is it
if(values[2] == "Car")
{
itemlist.Add(new Car()
{
Name = values[0],
Price = int.Parse(values[1]),
Horsepower = int.Parse(values[3])
});
}
else if (values[2]=="Bicycle")
{
itemlist.Add(new Bicycle()
{
Name = values[0],
Price = int.Parse(values[1]),
NumberOfPedals= int.Parse(values[3])
});
}

}
}
}

关于c# - 从 CSV 文件读取到对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43879035/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com