我正在尝试创建一个系统,客户可以在该系统中进行注册,并将凭证保存在.bat文件(学校作业)中。需要做的一件事是用户输入的用户名必须唯一且不能存在。但是我无法使它正常工作,即使用户名不存在,它也会不断循环并提示用户输入用户名。还有其他一些对象(例如名称和姓氏)需要添加到列表中,并且用户可以输入它们的值,但是这些对象不必唯一。
需要注意的是,列表是在另一个名为“ Database.cs”的类中创建的,“客户”类是从“人”继承的。如果您还不希望我显示更多代码,请告诉我。谢谢。
在Database.cs
中class Database
{
public List<Customer> Customer { get; set; }
}
/ ------------------------------------------- --------------------------- /
在program.cs
中static void AddCustomer(){
Customer customer = new Customer();
Database db = new Database();
bool alreadyexists = db.Customer.Any(item => item.Username == customer.Username);
do
{
if (alreadyexists == false)
{
Console.Write("Username: ");
customer.Username = Console.ReadLine();
}
else
{
Console.WriteLine("Username already exists");
Console.ReadKey();
}
BusinessManager.Instance.AddCustomer(customer);
BusinessManager.Instance.SaveChanges();
} while (!alreadyexists);
}
然后将其传递给另一个名为'BusinessManager.cs'的类
public void AddCustomer(Customer customer)
{
DataManager.Instance.AddCustomer(customer);
}
然后将其传递给名为“ DataManager.cs”的类中的另一个方法
class DataManager
{
static DataManager singleton;
static Database db = null;
public static DataManager Instance
{
get
{
if (singleton == null)
singleton = new DataManager();
return singleton;
}
}
public DataManager()
{
db = new Database();
}
public void AddCustomer(Customer customer)
{
db.Customer.Add(customer);
}
答案 0 :(得分:2)
如果我对问题的理解正确,那么这将满足您的需求...
static void AddCustomer()
{
Database db = new Database();
// declare the variable - populate its value later
bool alreadyExists;
do
{
Console.Write("Username: ");
var username = Console.ReadLine();
// check the value the user just entered
alreadyExists = db.Customer.Any(item => item.Username == username);
if (alreadyExists)
{
Console.WriteLine("Username already exists");
}
}
// if alreadyExists is true, repeat
while (alreadyexists);
// now that we have a username that is not in the list,
// add the new customer, using the username variable
var customer = new Customer
{
Username = username
};
BusinessManager.Instance.AddCustomer(customer);
BusinessManager.Instance.SaveChanges();
}
您大都拥有它,但是您正在检查用户名在输入之前 ,并且您还在继续执行do / while循环,直到用户输入重复的用户名。
一旦输入了不在列表中的新用户名,它将创建一个新的Customer对象,并使用BusinessManager
类添加和保存它。
答案 1 :(得分:1)
到达此行时,您的alreadyexists
变量将只执行一次:
bool alreadyexists = db.Customer.Any(item => item.Username == customer.Username && item.ID == customer.ID);
然后在while循环迭代中对其进行检查时,该值仍与首次执行时相同。要在每次迭代中重新执行该查询,您绝对可以alreadyexists
作为委托:
Func<bool> alreadyexists = () => db.Customer.Any(item => item.Username == customer.Username && item.ID == customer.ID);