[C#] 일반 유형 또는 메소드 ‘System.Nullable <T>’에서 매개 변수 T로 사용하려면 ‘string’유형은 널 입력 불가능 유형이어야합니다.

“일반 형식 또는 메서드 ‘System.Nullable’에서 매개 변수 ‘T’로 사용하려면 ‘string’형식이 nullable이 아닌 값 형식이어야합니다.”오류가 발생하는 이유는 무엇입니까?

using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using Universe;

namespace Universe
{
    public class clsdictionary
    {
      private string? m_Word = "";
      private string? m_Meaning = "";

      string? Word {
          get { return m_Word; }
          set { m_Word = value; }
      }

      string? Meaning {
          get { return m_Meaning; }
          set { m_Meaning = value; }
      }
    }
}



답변

코드의 모든 장소 string대신에 사용하십시오 string?.

Nullable<T>타입 T는 예를 들면, 비 – 널 값 유형 것을 요구 int하거나 DateTime. 같은 참조 유형 string은 이미 null 일 수 있습니다. 같은 것들을 가능하게 아무 소용이 없을 것 Nullable<string>이 허용되도록합니다.

또한 C # 3.0 이상을 사용하는 경우 자동 구현 된 속성 을 사용하여 코드를 단순화 할 수 있습니다 .

public class WordAndMeaning
{
    public string Word { get; set; }
    public string Meaning { get; set; }
}


답변

string참조 유형, 클래스입니다. 만 사용할 수 있습니다 Nullable<T>또는 T?비 – 널 (NULL)와 C # 문법 설탕 과 같은 유형 intGuid.

특히, string참조 형식과 마찬가지로 형식의 식은 string이미 null 일 수 있습니다.

string lookMaNoText = null;


답변

System.String (자본 S 포함)은 이미 널 입력 가능하므로 선언 할 필요가 없습니다.

(string? myStr) 잘못되었습니다.


답변

매우 구체적인 이유로 Type Nullable<int>은 커서를 Nullable에 놓고 F12를 누르십시오. 메타 데이터가 이유를 제공합니다 (구조 제한 조건 참고).

public struct Nullable<T> where T : struct
{
...
}

http://msdn.microsoft.com/en-us/library/d5x73970.aspx


답변

다가오는 C # 버전 인 8에서 답은 사실이 아닙니다.

All the reference types are non-nullable by default 실제로 다음을 수행 할 수 있습니다.

public string? MyNullableString;
this.MyNullableString = null; //Valid

하나,

public string MyNonNullableString;
this.MyNonNullableString = null; //Not Valid and you'll receive compiler warning. 

여기서 중요한 것은 코드의 의도를 보여주는 것입니다.
“의도”가 참조 유형이 널 (null) 일 수있는 경우, 널 (NULL) 값을 널 (null)이 아닌 값으로 지정하면 컴파일러 경고가 발생합니다.

더 많은 정보


답변