Возврат обнуляемых типов строк - PullRequest
14 голосов
/ 30 мая 2009

Итак, у меня есть что-то вроде этого

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

, который не компилируется.

Как я могу вернуть обнуляемый тип строки?

Ответы [ 5 ]

35 голосов
/ 30 мая 2009

String уже обнуляемый тип. Nullable может использоваться только для ValueTypes. Строка является ссылочным типом.

Просто избавься от "?" и тебе надо идти!

4 голосов
/ 30 мая 2009

Как и все остальные, string не нужно ? (что является сокращением для Nullable<string>), потому что все ссылочные типы (class es) уже обнуляются. Это относится только к типу значения (struct s).

Кроме того, вы не должны вызывать ToString() для значения сеанса, прежде чем проверять, является ли оно null (или вы можете получить NullReferenceException). Кроме того, вам не нужно проверять результат ToString() для null, потому что он никогда не должен возвращать 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 голосов
/ 30 мая 2009

string уже самообнуляемо.

0 голосов
/ 30 мая 2009

String уже обнуляемый тип. Вам не нужно '?'.

Ошибка 18 Тип 'строка' должен быть необнуляемый тип значения для того, чтобы используйте его как параметр 'T' в общем тип или метод 'System.Nullable'

0 голосов
/ 30 мая 2009

Вы можете присвоить null строку, так как она является ссылочным типом, вам не нужно иметь возможность сделать его обнуляемым.

...