Development Tip

"bool"과 "bool"의 차이점은 무엇입니까?

yourdevel 2021. 1. 6. 20:32
반응형

"bool"과 "bool"의 차이점은 무엇입니까?


저는 C ++에서 사용했던 것처럼 변수에 "bool"유형을 사용하고 부울이 될 것으로 예상되는 함수 또는 속성의 값을 변수에 넣으려고합니다. 그러나 결과 유형이 "bool?"인 경우가 자주 발생합니다. "bool"이 아니고 암시 적 캐스팅이 실패합니다.

둘의 차이점은 무엇이며 각각 사용되는시기는 무엇입니까? 또한 "bool"을 사용해야합니까? 내 변수의 유형으로? 이것이 모범 사례입니까?


?유형 뒤 기호는 Nullable 유형에 대한 바로 가기 뿐이며과bool? 같습니다 Nullable<bool>.

bool값 유형 입니다. 이는 가능하지 않음을 의미 null하므로 Nullable 유형은 기본적으로 값 유형을 래핑하고 할당 null할 수 있습니다.

bool?세 가지 값을 포함 할 수 있습니다 : true, falsenull.

또한 다음에 대해 정의 된 단락 연산자 (&& ||)가 없습니다. bool?

논리 AND, 포함 OR 연산자 만 정의되며 다음과 같이 작동합니다.

x        y      x & y   x | y   
true    true    true    true
true    false   false   true
true    null    null    true
false   true    false   true
false   false   false   false
false   null    false   null
null    true    null    true
null    false   false   null
null    null    null    null

Nullable 형식은 기본적으로 다음과 같은 공용 속성이있는 일반 구조체입니다.

public struct Nullable<T> where T: struct
{
    public bool HasValue { get; }
    public T Value { get; }
}

HasValue속성은 현재 개체에 값이 있는지 여부를 나타냅니다, 그리고 Value속성은 개체의 현재 값을 얻을 것이다, 또는 HasValue가 false 인 경우, 그것은 InvalidOperationException이 발생합니다.

이제 뭔가 궁금 할 것입니다. Nullable은 구조체, null 일 수없는 값 유형입니다. 그러면 다음 문이 유효한 이유는 무엇입니까?

int? a = null;

이 예제는 다음과 같이 컴파일됩니다.

.locals init (valuetype [mscorlib]System.Nullable`1<int32> V_0)
IL_0000:  ldloca.s   V_0
IL_0002:  initobj    valuetype [mscorlib]System.Nullable`1<int32>

지정된 주소에서 값 유형의 각 필드를 널 참조 또는 적절한 기본 유형의 0으로 초기화 하는 initobj에 대한 호출 입니다.

그게 다 입니다. 여기서 일어나는 일은 기본 구조체 초기화 입니다.

int? a = null;

다음과 같습니다.

Nullable<int> a = new Nullable<int>();

bool?nullable이지만 bool그렇지 않습니다.

bool? first;
bool second;

위의 코드에서, first될 것입니다 null반면 second될 것입니다 false.

한 가지 일반적인 용도는 변수에 할당이 있는지 여부를 알고 자하는 경우입니다. 이후 boolA는 값 유형이 (다만 int, long, double, DateTime그리고 몇몇 다른 유형), 그것은 항상 (기본값으로 초기화됩니다 falsea의 경우 bool, 0의 경우 int). 이는 false코드가 할당 false되어 있는지 false아니면 아직 할당되지 않았기 때문 인지 쉽게 알 수 없음을 의미합니다 . 이 경우 bool?편리합니다.


당신이 볼 때마다? 유형 이름 뒤에 오는 문자는 Nullable<TypeName>. Nullable은 값 형식이 null 값처럼 작동 할 수 있도록하는 특수 형식입니다. 값 유형을 명시 적으로 표현하는 방법은 값이 아닌 값을 가질 수 있습니다.

bool의 경우 변수를 3 상태 값으로 효과적으로 변환합니다.

  • 가치 : 참
  • 값 포함 : 거짓
  • 가치없이

추가 ?하면 유형이 널 가능하게됩니다. 즉, 다음을 수행 할 수 있습니다.

bool? x = null;

그리고 그것은 완전히 괜찮을 것입니다.


부울? 부울이 nullable이고 구조에 대한 구문 설탕임을 의미합니다 Nullable<bool>. 부울은 값 유형이므로 null로 설정할 수 없지만 데이터베이스 필드에 null 값이있을 수 있기 때문에 데이터 액세스 클래스에서 원하는 경우가 있습니다.


bool can contain only true and false values while bool? can also have a null value.


Another good place to use bool? is in a method to add null checking

public bool? IsTurkeyStillInFridge(Turkey turkey)
{
  if (turkey == null)
     return null;
  else if (fridge.Contains(turkey))
     return true;
  else
     return false;
}

bool? canStayAtDesk = IsTurkeyStillInFridge(turkey);

if (canStayAtDesk == null)
    MessageBox.Show("No turkey this year, check for ham.");
else if (canStayAtDesk == true)
    MessageBox.Show("Turkey for lunch. Stay at desk.");
else
    MessageBox.Show("Turkey's gone, go out to lunch.");

bool means you can have values of true and false. bool? means you can have a value of true, false, and null.

It works for datetime and booleans.

ReferenceURL : https://stackoverflow.com/questions/1181491/whats-the-difference-between-bool-and-bool

반응형