Как вернуть сообщение об ошибке / null из метода, тип возвращаемого значения int? - PullRequest
0 голосов
/ 27 июня 2019

У меня есть метод C #, подпись которого выглядит следующим образом:

public int MyMethod(string myString)

Я обращаюсь к базе данных, ищу кортеж в таблице и затем получаю Idиз кортежа.Это Id будет возвращено этим методом.Однако я хочу вернуть либо null, либо в идеале, сообщение об ошибке на экране, если этот кортеж не найден в таблице.Как я могу это сделать?

Мой образец:

try
{
    ...
    ...
    if(dataFromDB != null)
    {
        ...
        return dataFromDB.Id;
    }
}
catch(Exception myException)
{
    ...
}
return ...;

Ответы [ 2 ]

2 голосов
/ 27 июня 2019

Вы можете вернуть несколько значений из метода, используя концепцию Класс кортежа , и изменить свой метод следующим образом:

public (int id, string message) GetDataFromDB()
{
    if(dataFromDB == null)
        return ( 0, "Data not found");
    else
        return (dataFromDB.Id, "");
}

и вызвать его таким образом

var result = GetDataFromDB();
if(string.IsNullOrEmpty(result.message))
    Console.WriteLine("Success, found ID=" + result.id);
else
    Console.WriteLine("Failure: " + result.message);

Может использоваться , начиная с C # 7.0

1 голос
/ 27 июня 2019

Лично мне не нравится возвращать значения ИЛИ сообщения об ошибках того же метода. Я считаю, что методы должны возвращать значения или генерировать исключения, и пользовательский интерфейс должен интерпретировать результат и отображать соответствующее сообщение соответствующим образом.

Вы всегда можете заставить метод возвращать Обнуляемый тип . и возвращает ноль, если значение не найдено. Вот так:

        public int? MyMethod(string myString)
        {
            try
            {

            if (dataFromDB != null)
            {
                return dataFromDB.Id;
            }
            catch (Exception myException)
            {
                return null;
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...