“일반 형식 또는 메서드 ‘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 # 문법 설탕 값 과 같은 유형 int
및 Guid
.
특히, string
참조 형식과 마찬가지로 형식의 식은 string
이미 null 일 수 있습니다.
string lookMaNoText = null;
답변
System.String
(자본 S 포함)은 이미 널 입력 가능하므로 선언 할 필요가 없습니다.
(string? myStr)
잘못되었습니다.
답변
매우 구체적인 이유로 Type Nullable<int>
은 커서를 Nullable에 놓고 F12를 누르십시오. 메타 데이터가 이유를 제공합니다 (구조 제한 조건 참고).
public struct Nullable<T> where T : struct
{
...
}
답변
다가오는 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)이 아닌 값으로 지정하면 컴파일러 경고가 발생합니다.