18

だから私はこのようなものを持っています

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 許容の文字列型を返すにはどうすればよいですか?

4

5 に答える 5

41

文字列はすでに null 許容型です。Nullable は、ValueTypes でのみ使用できます。文字列は参照型です。

「?」を取り除くだけです。そして、あなたは行く準備ができているはずです!

于 2009-05-29T22:23:46.877 に答える
6

他の誰もが言ったように、string必要はありません?(これは のショートカットですNullable<string>)。すべての参照型 ( classes) は既に nullable であるためです。struct値型 ( s)にのみ適用されます。

それとは別にToString()、セッション値がそうであるかどうかを確認する前に、セッション値を呼び出してはなりませんnull(または を取得できますNullReferenceException)。また、 (正しく実装されていれば)返されないため、 ToString()forの結果をチェックする必要はありません。セッション値が空( ) の場合に戻りますか?nullnullnullstring""

これは、あなたが書くつもりだったものと同じです:

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();
}
于 2009-05-29T22:54:09.857 に答える
0

文字列はすでに null 許容型です。「?」は必要ありません。

エラー 18 型 'string' は、ジェネリック型またはメソッド 'System.Nullable' でパラメーター 'T' として使用するために、null 非許容値型である必要があります

于 2009-05-29T22:26:54.640 に答える
0

stringはすでにそれ自体で nullable です。

于 2009-05-29T22:28:20.877 に答える
0

参照型であるため、文字列に null を割り当てることができます。null 可能にする必要はありません。

于 2009-05-29T22:24:41.273 に答える