ASP.NET MVC 3 - Как это логическое значение работает в контроллере? - PullRequest
4 голосов
/ 12 марта 2012

Я смотрю учебник для asp.net mvc здесь на сайте asp: http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-basic-crud-functionality-with-the-entity-framework-in-asp-net-mvc-application

В контроллере есть метод, который меня смущает:

//
        // GET: /Student/Delete/5

        public ActionResult Delete(int id, bool? saveChangesError)
        {
            if (saveChangesError.GetValueOrDefault())
            {
                ViewBag.ErrorMessage = "Unable to save changes.  Try again, and if the problem persists contact your system administrator.";
            }
            return View(db.Students.Find(id));
        }

Я вижу, что создается bool с именем 'saveChangesError', но в операторе if для логического значения вызывается метод GetValueOrDefault ()

Что именно происходит в этом сценарии?Я предполагаю, что GetValueOrDefault () должен быть методом всех логических типов?Я посмотрел это в документации .NET и нашел это определение:

Значение свойства Value, если свойство HasValue равно true;в противном случае значение по умолчанию текущего объекта Nullable (Of T).Тип значения по умолчанию является аргументом типа текущего объекта Nullable (Of T), а значение по умолчанию состоит исключительно из двоичных нулей.

У меня проблемы с подключением этого определенияс приложением .net mvc.

Спасибо.

Ответы [ 5 ]

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

GetValueOrDefault() не является частью bool, это часть Nullable<T>.Ключевым моментом здесь является синтаксис, в котором bool объявлен в заголовке функции:

public ActionResult Delete(int id, bool? saveChangesError)

Знак вопроса - это языковая конструкция C #, которая указывает, что это не на самом деле abool, но это Nullable<bool>.Типы значений, одним из которых является bool, не могут быть null.Но иногда было бы полезно, если бы они могли .Таким образом, структура Nullable<T> существует для этой цели.

GetValueOrDefault() - это метод этой структуры, который возвращает значение bool или значение по умолчанию для bool (false), если значение не указано.

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

Посмотрите на определение параметра bool? saveChangesError The?означает, что тип bool может быть обнуляемым.Это может быть True |False |Null.

Поскольку теперь у него есть три значения, вы не можете просто проверить true |false.Вы также должны проверить на нулевое значение.

GetValueOrDefault() добавляется к обнуляемым типам, что в точности соответствует описанию метода.Если параметр имеет значение, он вернет его, если он не вернет значение по умолчанию (в данном случае это false ).

Итак, чтобы прервать оператор ifбыло бы что-то вроде

if (saveChangesError.HasValue && saveChangesError == true)
{
    //...
}

Использование метода просто делает его более кратким.

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

Документация гласит, что GetValueOrDefault() "Извлекает значение текущего объекта Nullable(Of T) или значение объекта по умолчанию". Nullable(Of T) в этом случае saveChangesError.

Если при сохранении изменений в базе данных произошла ошибка (в данном случае при удалении учащегося), то saveChangesError.GetValueOrDefault() вернет true, а оператор if обработает его содержимое.

1 голос
/ 12 марта 2012
bool? saveChangesError 

- это тип данных типа null. У этого есть три возможных значения: 1) верно 2) ложный 3) ноль

GetValueOrDefault () вернет либо true, либо false, если значение установлено, или null, если оно не установлено. В сценарии упоминания, если значение истинно

if (saveChangesError.GetValueOrDefault())

Произошла ошибка. Надеюсь, это поможет

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

Все объекты Nullable реализуют перегруженный метод GetValueOrDefault: возвращает значение объекта Nullable, если ему был присвоен объект, или значение по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...