[C#] 유형 다음에 물음표의 목적은 무엇입니까 (예 : int? myVariable)?

일반적으로 물음표의 주요 용도는 조건부 x ? "yes" : "no"입니다.

그러나 다른 용도로 보았지만 ?예를 들어 연산자 사용에 대한 설명을 찾을 수 없습니다 .

public int? myProperty
{
   get;
   set;
}



답변

해당 값 유형이 널 입력 가능 유형 임을 의미합니다.

널 입력 가능 유형은 System.Nullable 구조체의 인스턴스입니다. 널 입력 가능 유형은 기본 값 유형에 대한 올바른 값 범위와 추가 널 값을 나타낼 수 있습니다. 예를 들어
Nullable<Int32>“Nullable of Int32″로 발음되는 -2147483648에서 2147483647 사이의 값을 지정하거나 null 값을 지정할 수 있습니다. A에 Nullable<bool>true, false 또는 null 값을 할당 할 수 있습니다. 숫자 및 부울 유형에 널을 지정하는 기능은 값이 지정되지 않은 요소가 포함 된 데이터베이스 및 기타 데이터 유형을 처리 할 때 특히 유용합니다. 예를 들어, 데이터베이스의 부울 필드는 true 또는 false 값을 저장하거나 정의되지 않을 수 있습니다.

class NullableExample
{
  static void Main()
  {
      int? num = null;

      // Is the HasValue property true?
      if (num.HasValue)
      {
          System.Console.WriteLine("num = " + num.Value);
      }
      else
      {
          System.Console.WriteLine("num = Null");
      }

      // y is set to zero
      int y = num.GetValueOrDefault();

      // num.Value throws an InvalidOperationException if num.HasValue is false
      try
      {
          y = num.Value;
      }
      catch (System.InvalidOperationException e)
      {
          System.Console.WriteLine(e.Message);
      }
  }
}

답변

의 속기입니다 Nullable<int>. Nullable<T>값 유형을로 설정하는 데 사용됩니다 null. 값 유형은 일반적 으로 null 일 수 없습니다 .


답변

x ? "yes" : "no"

? if 문장을 선언합니다 . 여기에서 x 는 부울 조건을 나타냅니다. : 앞의 부분 은 then 문장이고 이후 부분은 else 문장입니다.

예를 들어

int?

? nullable 형식을 선언하고 형식이 null 형식 일 수 있음을 의미합니다.


답변

널 입력 가능 유형

널 입력 가능 유형은 System.Nullable 구조체의 인스턴스입니다. 널 입력 가능 유형은 기본 값 유형의 정상 값 범위와 추가 널 값을 나타낼 수 있습니다 . 예를 들어, Nullable<Int32>“Nullable of Int32″로 발음 되는 [ ]에 -2147483648에서 2147483647 사이의 값을 지정하거나 널값을 지정할 수 있습니다. [ Nullable<bool>]에 true 또는 false 또는 null 값을 지정할 수 있습니다. 숫자 및 부울 유형에 널을 지정하는 기능은 값이 지정되지 않은 요소를 포함하는 데이터베이스 및 기타 데이터 유형을 처리 할 때 특히 유용합니다. 예를 들어, 데이터베이스의 부울 필드는 true 또는 false 값을 저장하거나 정의되지 않을 수 있습니다.


답변

유형이 널 입력 가능함을 선언합니다.


답변

실제 사용법 :

public string someFunctionThatMayBeCalledWithNullAndReturnsString(int? value)
{
  if (value == null)
  {
    return "bad value";
  }

  return someFunctionThatHandlesIntAndReturnsString(value);
}


답변

위의 답변에 추가하려면 다음 코드 샘플이 있습니다.

struct Test
{
    int something;
}
struct NullableTest
{
    int something;
}
class Example
{
    public void Demo()
    {
        Test t = new Test();
        t = null;

        NullableTest? t2 = new NullableTest();
        t2 = null;
    }
}

컴파일 오류가 발생합니다.

오류 12 널이 아닌 값 유형이므로 널을 ‘테스트’로 변환 할 수 없습니다.

NullableTest에 대한 컴파일 오류가 없습니다. (t2 선언에서?를 참고하십시오)