首页 > 解决方案 > 将对象参数从一个类传递到另一个类

问题描述

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

标签: c#

解决方案


您似乎有两个完全独立且不相关 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;

推荐阅读