我对C#和编程领域都很陌生。我一直在书籍和YouTube视频中进行一些练习,以包围许多这些概念。
目前,我坚持这个问题。我有一个寄售商店的小应用程序,我正在努力删除硬编码的样本数据,并让程序从文本文件中读取数据。
这是我的供应商类:
public class Vendor
{
public string FirstName { get; set; }
public string LastName { get; set; }
public Vendor(string firstName, string lastName)
{
FirstName = firstName;
LastName = lastName;
}
}
这实际上是我的供应商的.csv文件并将它们推入字符串数组,创建对象并使用数组值填充它的属性,然后将该项添加到Vendor类型的列表中。这种方法不会引发任何错误。
private void ReadFromFile()
{
string line = "";
while ((line = myReader1.ReadLine()) != null)
{
string[] data = line.Split(',');
Vendor v = new Vendor(data[0], data[1]);
store.Vendors.Add(v);
}
}
当我尝试使用相同的解决方案将项目添加到列表时,我想传递项目的“所有者”,这是属于Vendor类型的属性,位于我的Items类中。由于我无法在构造函数中将对象作为参数传递,因此我决定坚持传递正式的数据类型。我基本上想要使用供应商的First Name& amp;属性。姓氏,并将其设置为项目所有者的名字和姓氏。
public class Item
{
public string Title { get; set; }
public decimal Price { get; set; }
public Vendor Owner { get; set; }
public Item(string title, decimal price, string fName, string lName)
{
Title = title;
Price = price;
Item.Owner.FirstName = fName; // this is what I want to do
Item.Owner.LastName = lName; // throws objref error
}
}
//Input file format: title,price,fname,lname
while ((line = myReader2.ReadLine()) != null)
{
string[] data2 = line.Split(',');
decimal price = decimal.Parse(data2[1]);
Item i = new Item(data2[0],price,data2[2],data2[3]);
store.Items.Add(i);
}
字符串使它进入数组,但是当我运行调试器并检查我的store.Items List时,除了Owner之外,每个属性值都被设置为null。 我知道一个解决方案可能是以某种方式将fName + lName组合成一个字符串,但是我很难理解我的Item构造函数如何根据它将接受的参数来设置。无论我尝试什么,Oner属性都不会收到值,这会导致我的应用程序的其余部分崩溃。
我已经在这工作了几个小时,但我似乎无法提出一个有效的解决方案,甚至是这种方案的解决方法。
非常感谢任何帮助。
谢谢!
答案 0 :(得分:0)
我认为你的代码甚至没有编译,但你想要的是:
Owner = new Vendor(fName, lName);
这实质上创建了一个Vendor
实例,并将其分配给Owner
变量。 Owner
未初始化且无效,这就是您获得例外的原因。
而不是:
Item.Owner.FirstName = fName; // this is what I want to do
Item.Owner.LastName = lName; // throws objref error
答案 1 :(得分:0)
您有异常,因为实际上并未创建Item.Owner
。
解决它:
public Item(string title, decimal price, string fName, string lName)
{
Title = title;
Price = price;
Item.Owner = new Vendor(fName, lName);
}
另外:你为什么写'Item.Owner'?它似乎不是static
。仅使用Owner
。
答案 2 :(得分:0)
在Java中,如果某个类是另一个类的成员,则使用new来初始化它。
因此,在构造函数中,您将执行以下操作:
public Item(string title, decimal price, string fName, string lName)
{
Title = title;
Price = price;
Owner = new Vendor(fName, lName);