2009-05-29 15 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種類「string」は 非null許容値型でなければならないために へのパラメータとして使用するジェネリック タイプまたは方法に「T」「可能System.Nullable」

-1

は、既にそれ自身でnull可能です。

誰もが言ったように
4

stringは、すべての参照型(class ES)がすでにNULL可能であるため、(Nullable<string>のショートカットである)?を必要としません。値タイプ(struct)にのみ適用されます。

null(または、NullReferenceExceptionを得ることができます)であるかどうかを確認する前に、セッション値にToString()を呼び出すべきではありません。また、null(正確に実装されている場合)を返すべきでないので、nullの結果をToString()で確認する必要はありません。そして、セッション値が空の場合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

参照型(クラス)はすでにnull可能です。 " - >そうではないようです。 'public class vector {public static vector func(){nullを返します。 }} 'がエラーになります。 – Assimilater

+0

インターフェイスは常にNULL可能であるようです。 – Assimilater

+0

@Assimilater私はあなたのコードを試しました。コンパイルして、うまく走った。 'vector'はクラスなので、' func() 'は間違いなく' null'を返すことができます。 – Lucas

関連する問題