我有一个类,该类基本上从连接到数据库的函数中获取值,该函数传递的参数是UserID,它存储在数组索引类型为0的对象中,该对象有效-当我在控制台中打印值时,UserID输出期望值
class DatabaseClass
{
private String[,] dbUsersResults = new String[1, 3];
//**************************** SIGN IN USER ****************************
public bool dbSignIn(String username, String password)
{
UserDetails[] ud = new UserDetails[1];
Boolean isValid = false;
dbRead("SELECT * FROM user_credentials WHERE username = '" + username + "' AND password = '" + password + "'", "signin");
if ((dbUsersResults[0, 1] == username) && (dbUsersResults[0, 2] == password))
{
ud[0] = new UserDetails();
ud[0].UserID = dbUsersResults[0, 0];
ud[0].Username = username;
ud[0].Password = password;
}
}
}
现在我的问题是,当我尝试从不同的类调用UserID对象ud时,在类UserDetails对象ud的数组0中,参数为空
下面我从中调用UserID参数的其他类的代码
UserDetails[] ud = new UserDetails[1];
ud[0] = new UserDetails();
Console.WriteLine(ud[0].UserID);
答案 0 :(得分:1)
您似乎有两个完全分离且不相关的 ud
变量:方法dbSignIn()
中的一个变量和调用代码中的一个变量。没有“魔术”可以使编译器理解您希望它们实际上是相同的,因此它们是分开的。
有多种方法可以解决此问题,例如(但不限于):
ud
设为class DatabaseClass
的公开成员,并从主叫方使用它。ud
设为class DatabaseClass
的私有成员,并提供访问它的公共方法或属性dbSignIn()
返回ud
变量(而不是布尔值),并从调用方使用该变量。dbSignIn()
一个out UserDetails[] ud
参数,并从调用方使用它。除了所有这些,我想知道为什么您使用的是UserDetails数组,而不是单个对象。一次只处理一个用户名+密码,因此只需将其声明为UserDetails ud
,然后再加上以下内容即可:
ud.UserID = dbUsersResults[0, 0];
ud.Username = username;
ud.Password = password;