2009-05-29 11 views
10

그래서 나는 컴파일되지 않습니다이반환 널 (NULL) 문자열 유형

public string? SessionValue(string key) 
{ 
    if (HttpContext.Current.Session[key].ToString() == null || HttpContext.Current.Session[key].ToString() == "") 
     return null; 

    return HttpContext.Current.Session[key].ToString(); 
} 

같은 것을 가지고있다.

null 입력 가능 문자열 유형을 반환하려면 어떻게해야합니까?

답변

30

문자열은 이미 null 가능 유형입니다. Nullable은 ValueTypes에서만 사용할 수 있습니다. 문자열은 참조 유형입니다.

"?" 너는 잘 가야 해!

0

null을 문자열에 지정할 수 있습니다. 참조 유형이므로 null을 지정할 필요가 없습니다.

0

문자열은 이미 null 가능 유형입니다. 당신은 '?'이 필요하지 않습니다.

에러 18 형 '문자열'일반 형 또는 방법 파라미터 'T'로 사용 하기 위해 비 - 널 값 유형이어야 '선택 System.Nullable'

-1

은 이미 자체 nullable입니다.

다른 사람들이 말한 것처럼
4

, string 모든 참조 형식 (class ES)가 이미 널 (NULL) 때문에 (Nullable<string>에 대한 바로 가기입니다) ? 필요하지 않습니다. 값 유형 (struct 초)에만 적용됩니다.

그 외에도 null (또는 NullReferenceException을 얻을 수 있는지)을 확인하기 전에 세션 값에 ToString()을 호출하면 안됩니다. 또한 null에 대한 ToString()의 결과를 확인하지 않아도됩니다. 올바르게 구현 된 경우 null을 반환하지 않아야합니다. 그리고 세션 값이 비어있는 경우 null을 반환 하시겠습니까? string ("")?

public string SessionValue(string key) 
{ 
    if (HttpContext.Current.Session[key] == null) 
     return null; 

    string result = HttpContext.Current.Session[key].ToString(); 
    return (result == "") ? null : result; 
} 

이 같은 내가 작성합니다 있지만 (빈 string를 돌려 그 세션 값에 포함 된 내용 인 경우) :

당신이 쓰고 무엇을 의미하는지에 해당

public string SessionValue(string key) 
{ 
    object value = HttpContext.Current.Session[key]; 
    return (value == null) ? null : value.ToString(); 
} 
+0

"모든 때문에 참조 유형 (클래스)은 이미 nullable입니다. " -> 그렇게 보이지는 않습니다. '공용 클래스 vector {public static vector func() {return null; }}'오류가 발생합니다. – Assimilater

+0

인터페이스가 항상 nullable 인 것 같습니다 – Assimilater

+0

@Assimilater 방금 코드를 시도했습니다. 그것은 나를 위해 컴파일되고 달렸다. 'vector'는 클래스이므로'func()'는 확실히'null'을 반환 할 수 있습니다. – Lucas