ahmed_sa Ответов: 1

Как вернуть идентификатор пользователя и ветви из этой функции ?


проблема
how to return user id and branches datatble from this function by using csharp ?

так что мне нужно вернуть несколько данных из функции, но я не могу знать, как это сделать ?
данные, которые мне нужно вернуть, находятся в случае возврата IsUserValid
<pre>UserId,dtGetBranches

а если недействительно
string.Format("Invalid User Name {0} Or Password {1}",UserId,Password);


а в случае отсутствия действительного возврата

а если ...

Что я уже пробовал:

public string PostUserLogin(string UserId, string Password)
       {
           DataAccess.CurrentDataBase = DataAccess.Credentials.SecurityDB;
           //================
           if (!string.IsNullOrEmpty(UserId))
           {
               DbParameter[] parameters = UserManager.CreateLoginParameters(UserId,Password);
               //:: Check For PassWord Validation days
               DataTable dt = DataAccess.ExecuteDataTable(SqlFactory.Queries.Userss_ValidatePasswordDays(), parameters);
               DataRow PassWordDays;
               if (dt.Rows.Count > 0) PassWordDays = dt.Rows[0];
               else PassWordDays = null;


               if (PassWordDays != null)
               {
                   if (!string.IsNullOrEmpty(PassWordDays["PasswordDate"].ToString()) && !string.IsNullOrEmpty(PassWordDays["PWDays"].ToString()))
                   {
                       if (Convert.ToInt32(PassWordDays["PWDays"].ToString()) > 0)
                       {
                           if (Convert.ToDateTime(PassWordDays["PasswordDate"].ToString()).AddDays(Convert.ToDouble(PassWordDays["PWDays"].ToString())).ToOADate() < DateTime.Now.ToOADate())
                           {


                           }
                       }
                   }
               }

               //==============
               bool IsUserValid = UserManager.IsValidUser(UserId, Password);
               if (IsUserValid)
               {
                   DataAccess.Credentials.SystemUserID = UserId;
                   DataTable dtGetBranches = DataAccess.ExecuteDataTable(
                           SqlFactory.Queries.Users_GetBranches(
                                                       DataAccess.Credentials.SystemUserID));
               }
               else
               {
                   string.Format("Invalid User Name {0} Or Password {1}",UserId,Password);
               }

           }
       }

1 Ответов

Рейтинг:
2

OriginalGriff

Основная проблема заключается в том, что вы хотите вернуть два разных типа, А это означает, что ваша функция должна будет вернуть один тип. object - самый высокий общий класс между этими двумя.
И это делает вашу функцию очень трудной в использовании, потому что каждый раз, когда вы вызываете ее, вы должны проверить, какой тип она вернула, и привести ее к соответствующему типу, прежде чем вы сможете сообщить об ошибке или использовать ее. Это плохой дизайн.

Вместо этого дайте метод out параметры:

public bool PostUserLogin(string UserId, string Password, out DataTable results, out string errorMessage)
Затем верните bool, который является true, если он сработал, и false, если он потерпел неудачу.
Затем "внешний мир" может использовать соответствующий параметр и продолжить работу без проблем.