2008-10-09 17 views
135
private string? typeOfContract 
{ 
    get { return (string?)ViewState["typeOfContract"]; } 
    set { ViewState["typeOfContract"] = value; } 
} 

:C# 널 (NULL) 문자열 오류 나중에 코드에서이 같은 사용

typeOfContract = Request.QueryString["type"]; 

내가 진술 typeOfContract 라인의 선언에 다음과 같은 오류가 점점 오전 :

유형을 ' 문자열 '은 generic 형식 또는 메서드에서 을 매개 변수'T '로 사용하려면 null이 아닌 값 형식이어야합니다. 'System.Nullable < T> '

아이디어가 있으십니까? 기본적으로 작업을 수행하기 전에 QueryString"type"이 있는지 확인하고 싶습니다.

답변

303

System.String은 참조 형식이며 이미 "nullable"입니다.

Nullable < T> 및? 접미사는 Int32, Double, DateTime 등과 같은 값 유형을위한 것입니다.

+13

한 가지주의해야 할 :

은 다음 페이지는 C#을 프리미티브의 목록을 제공 Null 허용 이 값 형식 자체를하지만,이 제네릭 형식 제약 조건은 nullable이 아닌 값 형식을 포함한다 "구조체" - Nullable >을 할 수 없습니다. –

39

당신은 복잡하게 만듭니다. 은 이미 null 가능합니다. 더 이상 이 될 필요가 없습니다. nullable입니다. 속성 유형에 ?을 가져갑니다.

19

string은 값 유형이 아니기 때문에 string을 Nullable의 매개 변수로 사용할 수 없습니다. 문자열은 참조 유형입니다.

string s = null; 

은 매우 유효한 문이며 Null을 허용 할 필요가 없습니다.

private string typeOfContract 
    { 
     get { return ViewState["typeOfContract"] as string; } 
     set { ViewState["typeOfContract"] = value; } 
    } 

때문에 등의 키워드로 작동합니다.

13

문자열은 참조 유형이므로 여기서는 Nullable<T>을 사용할 필요가 없으며 사용할 수 없습니다. 단순히 문자열로 typeOfContract 선언하고 쿼리 문자열에서 가져온 후 null을 확인하십시오. 또는 빈 문자열 값을 null과 동일하게 처리하려면 String.IsNullOrEmpty를 사용하십시오.

4

nullable의 경우 C# 프리미티브이 모두 포함 된 ? (문자열 제외)을 사용하십시오. http://msdn.microsoft.com/en-us/library/aa711900(v=vs.71).aspx

+1

링크가 끊어졌습니다. 감사합니다. –

+0

감사합니다. 미나, 다른 링크를 발견하고 참조를 업데이트했습니다. –

+1

프리미티브뿐만 아니라 null이 허용되지 않는 모든 값 유형 (.NET에서 특수하게 처리하지 않음) 작업. – IllidanS4