2012-03-12 5 views
3

나는 ASP 사이트에서 여기의 asp.net MVC에 대한 자습서를 찾고 있어요는 :ASP.NET MVC 3 -이 부울 값이 컨트롤러에서 어떻게 작동합니까?

// 
     // 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)); 
     } 

나는 것을보고 있어요 : 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

나를 혼란이 컨트롤러의 방법이있다 bool은 'saveChangesError'라는 이름으로 생성되지만 if 문에는 'GetValueOrDefault()'라는 부울에서 호출되는 메서드가 있습니다.

이 시나리오에서 정확히 무엇이 일어나고 있습니까? GetValueOrDefault()가 모든 부울 유형의 메소드 여야한다고 가정합니다. .NET 문서에서 이것을 살펴본 결과, 다음 정의가 발견되었습니다.

HasValue 속성이 true 인 경우 Value 속성의 값. 그렇지 않으면 현재 Nullable (Of T) 개체의 기본값입니다. 기본값의 형식은 현재 Nullable (Of T) 개체의 형식 인수이며 기본값은 이며 이진수는 0입니다.

이 정의를 .net mvc 앱에서 진행되는 것과 연결하는 데 문제가 있습니다.

감사합니다.

+2

아니요, null 허용 bool의 경우에만 – dotjoe

답변

5

GetValueOrDefault()bool, it's part of Nullable<T>의 일부가 아닙니다.

public ActionResult Delete(int id, bool? saveChangesError) 

물음표이이 bool정말 아니지만, Nullable<bool>임을 나타내는 C# 언어 구조입니다 : 여기서 핵심은 bool이 함수 헤더에 선언 된 구문입니다. 값 유형은 bool이고 하나는 null이 될 수 없습니다. 그러나 때때로 그들은 일 수 있다면 유용 할 것입니다. 그래서 Nullable<T> 구조체가 그 목적을 달성하기 위해 존재합니다.

GetValueOrDefault()는 값이 지정되지 않은 경우 bool 값 또는 bool (which is false)에 대한 디폴트 값을 반환하는 구조체의 방법이다.

+0

감사합니다. 많은 좋은 답변을 주셨습니다 만 이것이 가장 도움이됩니다. – PhillipKregg

2

documentationGetValueOrDefault() "현재 Nullable(Of T) 개체의 값 또는 개체의 기본값을 검색합니다."라고 명시되어 있습니다. 이 경우 Nullable(Of T)saveChangesError입니다.

데이터베이스 변경 사항 저장 (이 경우 학생 삭제)에 오류가 발생하면 saveChangesError.GetValueOrDefault()이 true를 반환하고 if 문은 해당 내용을 처리합니다.

+1

기본값을 사용합니다. OP를 알 수없는 경우 초기화하지 않고 값을 선언하면됩니다. 그러므로 bool의 기본값은 false, ints는 0, 객체 null 등입니다. – bhamlin

1

Nullable 개체는 모두 GetValueOrDefault라는 오버로드 된 메서드를 구현합니다. nullable 개체가 할당되었거나 기본값 인 경우 nullable 개체의 값을 반환합니다.

1
bool? saveChangesError 

은 nullable boolean 데이터 유형입니다. 1)에 해당 2) 거짓 3) 널

GetValueOrDefault()는이 설정되지 않은 경우에 참 또는 거짓 값이 설정되어있는 경우, 또는 널 중 하나를 반환의 세 가지 가능한 값을 갖는다. 언급 시나리오에서 값이 true이면

if (saveChangesError.GetValueOrDefault()) 

오류가 발생했습니다. 희망이

+0

GetValueOrDefault()는 bool에 대해 null을 반환하지 않습니다. – bhamlin

+0

@bhamlin 미안하지만 나는 열심히이었다. 당신은 단지 bool을 null로 설정할 수있다. 기본값은 GetValueOrDefault() 메서드에서 false가된다. – jacqijvv

2

매개 변수의 정의를보세요 bool? saveChangesError '?' bool 유형이 널 (NULL) 입력 가능하다는 것을의 L합니다. 그것은 True 일 수 있습니다 | False | Null.

이제 세 개의 값이 있으므로 true | false. null도 확인해야합니다.

GetValueOrDefault()은 메소드가 설명하는 것과 정확히 일치하는 null 가능 유형에 추가됩니다. 매개 변수에 값이 있으면 기본값을 반환하지 않으면 반환합니다 (이 경우 거짓).

그래서, 단지 그것보다 간결하게하는 방법을 사용

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

같은 것, 무언가를 if 문을 중단합니다.

+0

감사합니다. 도움이됩니다. – PhillipKregg

관련 문제