Который является корректным способом проверить на Пустую исключительную ситуацию?

Проблема с вашим кодом в том, что он просто сравнивает времена, а не даты, поэтому очевидно, что в вашем примере время начала больше, чем время окончания. Попробуйте следующий пример, он отлично работает.

<?php

$TodayDate = date("Y-m-d");

$start = $TodayDate.' 20:00:00';

$TomorrowDate = new DateTime('tomorrow');

$TomorrowDate = $TomorrowDate->format('Y-m-d');

$end = $TomorrowDate.' 07:59:59'; //need to show until tomorrow time.
$time = strtotime($start);
$timeStop = strtotime($end);

while($time<$timeStop) {
    echo date('H:i', $time);
    $time = strtotime('+30 minutes', $time);
    echo ' - ' . date('H:i', $time) . '<br/>';
}
?>
20:00 - 20:30
20:30 - 21:00
21:00 - 21:30
21:30 - 22:00
22:00 - 22:30
22:30 - 23:00
23:00 - 23:30
23:30 - 00:00
00:00 - 00:30
00:30 - 01:00
01:00 - 01:30
01:30 - 02:00
02:00 - 02:30
02:30 - 03:00
03:00 - 03:30
03:30 - 04:00
04:00 - 04:30
04:30 - 05:00
05:00 - 05:30
05:30 - 06:00
06:00 - 06:30
06:30 - 07:00
07:00 - 07:30
07:30 - 08:00
5
задан Stephen Price 3 October 2008 в 02:41
поделиться

7 ответов

Если любой из HttpContext, HttpContext. Текущий, HttpContext. Текущий. Ответ или Http. Текущий. Ответ. Cookie являются пустыми, Вы уже в беде. Позвольте исключению произойти и зафиксировать Ваш веб-сервер.

19
ответ дан 18 December 2019 в 05:50
поделиться

мог попробовать:

if(HttpContext.Current != null && 
   HttpContext.Current.Response != null && 
   HttpContext.Current.Response.Cookies != null && 
   HttpContext.Current.Response.Cookies[authCookieName] != null) 
{
    // do your thing
}
4
ответ дан 18 December 2019 в 05:50
поделиться

HttpContext. Текущий. Ответ. Cookie никогда не будут пустыми. Единственная вещь, которая может вызвать пустой указатель, состоит в том, если cookie, который Вы ожидаете, не существует, таким образом, первое корректно. HttpContext. Текущий было бы пустым, если бы Вы не принимали веб-запрос хотя :)

1
ответ дан 18 December 2019 в 05:50
поделиться

Оба хороши. Предположение, что Вы уже проверили все остальное, что должно быть проверено сначала. Например:

private bool CheckSuspendersAndBelt()
{
    try
    {
        //ensure that true is true...
        if (true == true)
        {
            //...and that false is false...
            if (false == false)
            {
                //...and that true and false are not equal...
                if (false != true)
                {
                    //don't proceed if we don't have at least one processor
                    if (System.Environment.ProcessorCount > 0)
                    {
                        //and if there is no system directory then something is wrong
                        if (System.Environment.SystemDirectory != null)
                        {
                            //hopefully the code is running under some version of the CLR...
                            if (System.Environment.Version != null)
                            {
                                //we don't want to proceed if we're not in a process...
                                if (System.Diagnostics.Process.GetCurrentProcess() != null)
                                {
                                    //and code running without a thread would not be good...
                                    if (System.Threading.Thread.CurrentThread != null)
                                    {
                                        //finally, make sure instantiating an object really results in an object...
                                        if (typeof(System.Object) == (new System.Object()).GetType())
                                        {
                                            //good to go
                                            return true;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        return false;
    }
    catch
    {
        return false;
    }
}

(извините, не мог сопротивляться... :))

4
ответ дан 18 December 2019 в 05:50
поделиться

Первый пример, который Вы дали, более чем достаточно. Как упомянутый, если какой-либо из других объектов является пустым, существует проблема с ASP.NET.

if (HttpContext.Current.Response.Cookies[authCookieName] != null) {
    HttpContext.Current.Response.Cookies[authCookieName].Value = "New Value";
}

А скорее, чем замусоривание Вашего кода с ними часто много проверок, необходимо создать некоторые родовые функции как SetCookie, GetCookie, GetQueryString и GetForm, и т.д. которые принимают имя и значение (для Функций множества) как параметры, обрабатывают пустую проверку, и возвращает значение, или пустая строка (для Получают Функции). Это сделает Ваш код намного легче поддержать и возможно улучшиться, и если Вы решаете использовать что-то другое, чем Cookie для хранившего/получения опций в будущем, необходимо будет только изменить функции.

1
ответ дан 18 December 2019 в 05:50
поделиться

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

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

0
ответ дан 18 December 2019 в 05:50
поделиться

Если Вы думаете, что существует шанс это Current, Response, Cookies, или Cookies[authCookieName] мог быть null, и у Вас есть разумная вещь сделать, если какой-либо из них, то последний способ пойти. Если возможности являются низкими, и/или нет ничего, что можно сделать, если промежуточные звенья являются пустыми, пойдите для первого, поскольку это более кратко - лучшее, которое Вы могли сделать, должен получить лучший вход, если Вы используете расширенный пример.

0
ответ дан 18 December 2019 в 05:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: