C#将用户输入与数组匹配

时间:2014-12-01 00:42:07

标签: c#

我正在编写一些代码,其中有一些关于存储在名为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;
    }

1 个答案:

答案 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更清晰的语法。