Emmablakes Ответов: 1

Возвращает несколько значений из метода.


я пытаюсь вернуть 2 выходных параметра из этого метода c#, и он возвращает ошибку для второго параметра ruturn.

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

public string getEMails(string staffid)
{
используя (объекта oracleconnection OracleConn = нового объекта oracleconnection(или))
{
OracleConn.Открыть();
пробовать
{
запрос = "выбрать uetc.team_codes, функция lpad (papf.employee_number, 5, 0) staff_id,papf.full_name full_name и papf.employee_number = @employee_number";
OracleCommand OraC = new OracleCommand(query, OracleConn);
OraC.CommandType = CommandType. Text;
Орак.Параметры.Добавить(новый OracleParameter("employee_number", OracleDbType.Varchar2)).Значение = staffid;
// OraC.Parameters.Добавить(новый OracleParameter("идентификатора session_id", OracleDbType.Varchar2)).Значение = Код Сеанса;
// OraC.Parameters.Добавить (новый OracleParameter("V_RESULT", OracleDbType.Varchar2, 32767)).Направление = ParameterDirection.Выход;


//OracleDataReader dr = OraC. ExecuteNonQuery();
OracleDataReader dr = OraC. ExecuteReader();
в то время как (dr. Read())
{
SupervisorEmail = dr ["EMAIL_ADDRESS_1"]. ToString();
StaffEmail = dr ["EMAIL_ADDRESS"].Метод toString();
string id = dr ["STAFF_ID"].Метод toString();

}

}
поймать (исключение бывший)
{

например, сообщение.Метод toString();
}
наконец
{
OracleConn.Рядом();
}
возвращение супервайзера;
вернуться StaffEmail;

}
}

F-ES Sitecore

И ошибка в том, что...?

1 Ответов

Рейтинг:
1

OriginalGriff

Метод может возвращать только одно значение: это все, что позволяет определение.
Чтобы вернуть несколько значений, вам нужно либо использовать out или ref параметр также:

public string getEMails(string staffid, out staffEmail)
   {
   ...
   staffEmail = ... ;
   return SupervisorEmail;
   }

public string getEMails(string staffid, ref staffEmail)
   {
   ...
   staffEmail = ... ;
   return SupervisorEmail;
   }
И вызовите его, передав соответствующую переменную методу:
string staffEmail;
string supEmail = getEMails("00001", out staffEmail);

string staffEmail = "none";
string supEmail = getEMails("00001", ref staffEmail);


Или вы можете создать "контейнерный класс", который содержит оба ваших параметра, и вернуть его:
public class EMails
   {
   string Staff {get; set}
   string Supervisor {get; set;}
   }
...
public EMails getEMails(string staffid)
   {
   ...
   Emails em = new Emails;
   em.Staff = StaffEmail;
   em.Supervisor = SupervisorEmail;
   return em;
   }


phirSOFT

Как вы уже сказали, многократные возвраты в настоящее время не допускаются. Но они будут в C# 7.0. Взгляните на это
https://github.com/dotnet/roslyn/issues/347

OriginalGriff

Это предложение, а не" конкретное дополнение " - оно может появиться, а может и нет!