2009-05-29 257 views
10

所以我有這樣的事情返回可空字符串類型

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(); 
} 

不編譯。

如何返回可爲空的字符串類型?

回答

30

字符串已經是可以空的類型。可空值只能在ValueTypes上使用。字符串是一個引用類型。

剛剛擺脫「?」你應該很好走!

0

您可以將null分配給一個字符串,因爲它的引用類型不需要可以爲空。

0

字符串已經是可以空的類型。你不需要'?'。

錯誤18的類型「字符串」必須是順序 非空值類型來 在通用 類型或方法使用它作爲參數「T」「System.Nullable」

-1

string已經可以自行空了。

4

正如其他人所說的,string不需要?(這是Nullable<string>的快捷鍵),因爲所有的參考類型(class es)都是可以爲空的。它僅適用於值類型(struct s)。

除此之外,在檢查是否爲null(或者您可以獲得NullReferenceException)之前,您不應該在會話值上調用ToString()。此外,您不必檢查ToString()的結果null,因爲它永遠不會返回null(如果正確實施)。如果會話值爲空string""),您確定要返回null嗎?

這相當於你的意思寫:

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

「,因爲所有的引用類型(類)已經可以爲空。「 - >看起來並不如此。 `public class vector {public static vector func(){return null; }}`導致錯誤。 – Assimilater 2016-07-26 09:47:05