Есть ли встроенный тип в C #, который содержит bool и строку для возврата статического метода? - PullRequest
3 голосов
/ 21 марта 2012

Я ищу тип, который нужно вернуть из функции или метода, чтобы сначала передать, был ли он успешным или нет, а затем прикрепить к нему сообщение (в виде строки), чтобы передать дополнительную информацию о том, почему произошел сбой.Это может быть что-то вроде кода выхода из приложения;Тем не менее, я не хочу создавать полный набор кодов выхода, чтобы индексировать конкретное сообщение об ошибке.Мне действительно нравится идея единого «успешного» кода выхода, чтобы можно было быстро проверить, произошел сбой вызова или нет, и работать соответствующим образом.

Я хотел сделать это типом возврата ряда статических методов (например,сервисные вызовы), и для которого я мог бы просто создать класс с этими двумя полями (bool и string);однако, я чувствую, что что-то вроде этого может уже существовать, хотя я не смог найти его.Кроме того, если есть более эффективные методы обработки возврата из метода для получения такого рода информации или общего правила для статических классов такого рода, я приветствую ваши комментарии.

Для лучшей визуализации:

    public static <type> CreateSomething(string somethingName)
    {
        ...
        return new <type>("Fail!", "Because...");
    }

Ответы [ 5 ]

5 голосов
/ 21 марта 2012

Есть два очевидных подхода к этому: определить свой собственный тип или использовать Tuple<T1, T2>.

Я бы сказал, что вы почти всегда должны просто определять свой собственный тип.Это ничего не стоит.Просто сделай это.Вот как вы должны это делать.

Если вы чувствуете себя особенно ленивым ...

public Tuple<bool, string> MyMethod(...)
{
    ...
    return Tuple.Create(false, "Something broke");
}
3 голосов
/ 21 марта 2012

Вместо создания нового типа вы можете следовать шаблону TryDoSomething в .NET Framework.

Например:

int number;
if(Int32.TryParse(value, out number))
{
   Console.WriteLine(number);
}

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

2 голосов
/ 21 марта 2012

То, о чем вы говорите, называется generics .Вот введение Microsoft в дженерики , и о них тоже много в Интернете.

Более того, вы также можете комбинировать дженерики с шаблоном TryCan .Тем не менее, часто вы захотите просто выдать исключение, так что продумайте это правильно

1 голос
/ 21 марта 2012

Это исключение.

Ваша функция не должна возвращать true / false для успеха.Это должна быть пустота, которая выдает исключение в случае сбоя.

... И не забудьте добавить исключение в комментарии XML метода.

0 голосов
/ 21 марта 2012

Базовые сборки .net не содержат такого типа. Вы можете найти Option<T> во время выполнения F #.

Я также опубликовал такой тип в более старом вопросе о SO: Общие недостатки свойств?

...