我正在编写一些代码,其中有一些关于存储在名为members(id,initials)的数组中的客户的信息。然后我询问用户他们的id和首字母,并将输入与数组成员存储的信息进行匹配。如果他们匹配我继续前进。但是我在编码中遇到错误:"访问非静态字段方法或属性"需要对象引用。错误来自if语句。有关如何纠正此问题的任何建议吗?
一些背景信息:我有两个类,一个叫Customer,另一个叫Menu。菜单是主类,而Customer是我引用的类。
这是我的菜单类:
int L = 0;
string I = "";
Customer[] members = new Customer[2];
members[0] = new Customer(3242, "JS");
members[1] = new Customer(7654, "BJ");
Console.Write("\nWhat is your Loyalty ID #: ");
L =Convert.ToInt32(Console.ReadLine());
Console.Write("\nWhat is your first and last name initials: ");
I = Console.ReadLine();
if (L==Customer.GetId())
{
if (I == Customer.GetInitials())
{
Console.WriteLine("It matches");
}
}
else
{
Console.WriteLine("NO match");
}
Console.ReadKey();
}
}
}
来自我的客户类
private int id;
private string initials;
public Customer ()
{
}
public Customer(int id, string initials)
{
SetId(id);
SetInitials(initials);
}
public int GetId()
{
return id;
}
public void SetId(int newId)
{
id = newId;
}
public string GetInitials()
{
return initials;
}
public void SetInitials(string newInitials)
{
initials = newInitials;
}
答案 0 :(得分:1)
错误意味着它的内容。您无法通过调用Customer.GetId()访问Customer的GetId()
函数,因为GetId()仅适用于Customer实例,而不能直接通过Customer类。
Customer.GetId(); //this doesn't work
Customer myCustomer=new Customer(); myCustomer.GetId(); //this works
要根据您的输入数组检查用户的输入,您需要遍历数组(或者使用Linq)。
我将使用generic list,因为在大多数情况下使用数组并不是一个很好的理由。
List<Customer> customers=new List<Customer>();
Customers.Add();//call this to add to the customers list.
foreach(var c in customers)
{
if(c.GetId() == inputId)
{
//match!
}
else
{
//not a match
}
}
您还可以使用属性或自动属性(不需要支持字段)来改进您的Customer类。这是一个自动属性示例:
public string Id {get; set;} // notice there's no backing field?
使用上面的自动属性语法可以做到这一点:
var customer = new Customer();
string id = customer.Id; // notice there's no parentheses?
属性和自动属性允许比必须编写Java风格的单独getter / setter更清晰的语法。