это перебор для оценки Main (string [] args) - PullRequest
8 голосов
/ 19 марта 2012

Я получил следующее, и мне было интересно, если начальный тест излишним:

static void Main(string[] args) {
    if (args.Length == 0 || args == null) {           
        //do X
    }
    else { 
        //do Y 
    }
}

Другими словами, я спрашиваю: есть ли возможности аргументов args. Длина равна нулю, или аргументы равны нулю ... или достаточно одного из этих условий?

Ответы [ 5 ]

15 голосов
/ 19 марта 2012

Ну, Main определен, чтобы никогда не вызываться с параметром null.Если он действительно получает каким-либо образом нулевой параметр, то ваша среда настолько нарушена, что все ставки отключены, независимо от того, что вы делаете, поэтому на самом деле нечего получить, проверяя null.

С другой стороны, если вы делаете проверку на нулевое значение, то читатели и сопровождающие кода должны будут понять почему .Почему оригинальный программист вставил такую ​​бесполезную проверку?Он знал что-то, чего мы не знаем?Мы не можем просто удалить его, потому что он, возможно, обнаружил какую-то странную ошибку в угловых случаях!

Другими словами, вы добавляете сложность в свою программу и запускаете будущих читателей кода.Не делай этого.Этот будущий пользователь может быть вы .Сделайте свое будущее счастливым и напишите код, который имеет смысл .

Однако в ситуациях, когда такая нулевая проверка действительно имеет смысл, это должно быть самое левое условие.

В таком тесте: args.Length == 0 || args == null, args.Length оценивается first , а в случае неудачи args сравнивается с null.Другими словами, если args равно нулю, ваш код выдаст исключение.Должно быть args == null || args.Length == 0

10 голосов
/ 19 марта 2012

Согласно этому , вам нужно только проверить:

if (args.Length == 0)
{
    // Do X
}

Хотя проверка на null не приносит никакого вреда, в этом нет реальной необходимости.

3 голосов
/ 19 марта 2012

Если нет входных данных, тогда args.Length равно 0, но не равно нулю. Если есть какие-либо входные данные, то agrs.Length равно количеству входных аргументов. В заключение, аргументы не могут быть нулевыми, но длина может быть нулевой.

PS проверка на ноль сначала всегда

3 голосов
/ 19 марта 2012

Никогда не плохая идея сделать дополнительный контроль, если это не относится к высокой производительности, очень часто используемым функциям.Так что я бы сказал, нет, это не перебор.

И еще: сначала проверьте null, затем Length

0 голосов
/ 19 марта 2012
if (args == null)
{
    Console.WriteLine("args is null"); // Check for null array
}
else
{
    if (args.Length == 0)
    {
        //do X
    }
    else 
    { 
        //do Y 
    }
}
...