Возврат nullable строковых типов

# -*- coding: utf-8 -*-
import timeit

ncache = 0
cache = {}


def partition(number):
    global cache, ncache
    answer = {(number,), }
    if number in cache:
        ncache += 1
        return cache[number]
    if number == 1:
        cache[number] = answer
        return answer
    for x in range(1, number):
        for y in partition(number - x):
            answer.add(tuple(sorted((x, ) + y)))
    cache[number] = answer
    return answer


print('To 5:')
for r in sorted(partition(5))[::-1]:
    print('\t' + ' + '.join(str(i) for i in r))

print(
    'Time: {}\nCache used:{}'.format(
        timeit.timeit(
            "print('To 30: {} possibilities'.format(len(partition(30))))",
            setup="from __main__ import partition",
            number=1
        ), ncache
    )
)

или https://gist.github.com/sxslex/dd15b13b28c40e695f1e227a200d1646

15
задан Lucas 29 May 2009 в 22:41
поделиться

5 ответов

Строка уже имеет тип, допускающий значение NULL. Nullable можно использовать только в ValueTypes. String - это ссылочный тип.

Просто избавьтесь от "?" и тебе должно быть хорошо!

36
ответ дан 1 December 2019 в 01:05
поделиться

Строке можно присвоить значение null, поскольку это ссылочный тип, и вам не нужно делать ее допускающей значение null.

0
ответ дан 1 December 2019 в 01:05
поделиться

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

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

Хотя я бы написал это так (вернуть пустую строку , если это то, что содержится в значении сеанса):

public string SessionValue(string key)
{
    object value = HttpContext.Current.Session[key];
    return (value == null) ? null : value.ToString();
}
4
ответ дан 1 December 2019 в 01:05
поделиться

Строка уже имеет тип, допускающий значение NULL. Вам не нужен "?".

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

0
ответ дан 1 December 2019 в 01:05
поделиться

строка уже сама по себе может иметь значение NULL.

-1
ответ дан 1 December 2019 в 01:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: