将对象参数从一个类传递到另一个类

时间:2018-07-27 14:33:14

标签: c#

我有一个类,该类基本上从连接到数据库的函数中获取值,该函数传递的参数是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);

1 个答案:

答案 0 :(得分:1)

您似乎有两个完全分离且不相关的 ud变量:方法dbSignIn()中的一个变量和调用代码中的一个变量。没有“魔术”可以使编译器理解您希望它们实际上是相同的,因此它们是分开的。

有多种方法可以解决此问题,例如(但不限于):

  • ud设为class DatabaseClass的公开成员,并从主叫方使用它。
  • ud设为class DatabaseClass的私有成员,并提供访问它的公共方法或属性
  • make方法dbSignIn()返回ud变量(而不是布尔值),并从调用方使用该变量。
  • 给方法dbSignIn()一个out UserDetails[] ud参数,并从调用方使用它。

除了所有这些,我想知道为什么您使用的是UserDetails数组,而不是单个对象。一次只处理一个用户名+密码,因此只需将其声明为UserDetails ud,然后再加上以下内容即可:

ud.UserID = dbUsersResults[0, 0];
ud.Username = username;
ud.Password = password;