У меня есть сценарий, в котором я должен возвращать объекты разных типов в соответствии с условием.Возврат любого типа в C#
Для этого я использовал dynamic
тип возврата в C# 4.0.
Но я не мог этого достичь.
public dynamic ValidateUser(string UserName, string Password)
{
string Result = string.Empty;
Employees clsEmployee = new Employees();
Customer clsCustomer = new Customer();
sqlConnection = new SqlConnection(Connection());
command = new SqlCommand("dbo.usp_ValidateUser", sqlConnection);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add("@Username", SqlDbType.VarChar).Value = UserName;
command.Parameters.Add("@Password", SqlDbType.VarChar).Value = Password;
sqlConnection.Open();
SqlParameter newSqlParam = new SqlParameter();
newSqlParam.ParameterName = "@Result";
newSqlParam.SqlDbType = SqlDbType.NVarChar;
newSqlParam.Direction = ParameterDirection.Output;
newSqlParam.Size = 50;
command.Parameters.Add(newSqlParam);
SqlDataReader dr = command.ExecuteReader();
Result = command.Parameters["@Result"].Value.ToString();
if (Result == "Employee")
{
while (dr.Read())
{
clsEmployee.EmployeeId = (int)dr["EmployeeId"];
clsEmployee.EmployeeName = (string)dr["EmployeeName"];
clsEmployee.DepartmentName = (string)dr["DepartmentName"];
clsEmployee.RoleName = (string)dr["RoleName"];
}
return clsEmployee;
}
else if (Result == "Customer")
{
while (dr.Read())
{
clsCustomer.CustomerId = (int)dr["CustomerId"];
clsCustomer.CustomerName = (string)dr["CustomerName"];
clsCustomer.CustomerEmail = (string)dr["CustomerEmail"];
clsCustomer.CustomerMobile = (string)dr["CustomerMobile"];
}
return clsCustomer;
}
//How to return???
}
Когда я пытаюсь вернуться в состоянии он бросает мне
Не все ошибки кода путь возврата значение».
Любые решения?
Почему бы вам не разделить аутентификацию на отдельный класс от населения или хотя бы вернуть «IPerson»? 'dynamic' почти никогда не является правильным решением. –
Вместо того, чтобы иметь последний оператор 'else', просто' return Result; ' –
Я сильно подозреваю, что это не ваш фактический код, иначе вы бы не получили это сообщение об ошибке. Я подозреваю, что ваш последний 'else' на самом деле' else if' или что-то в этом роде. –