Вопрос по c#, type-conversion – Преобразовать обнуляемое число в строку

6

Я хочу преобразовать обнуляемое число в строкуmaintaining нулевое значение. Это то, что я делаю:

int? i = null;
string s = i == null ? null : i.ToString();

Есть что-то короче?

Не думаю, что на самом деле есть что-то более короткое Gerald Versluis
Кроме способа расширения, не вижу, что это становится короче. NominSim

Ваш Ответ

4   ответа
4

public static string ToStringOrNull<T>(this Nullable<T> nullable) 
where T : struct {
  return nullable.HasValue ? nullable.ToString() : null;
}

Использование:

var s = i.ToStringOrNull();

UPDATE

Начиная с C # 6, вы можете использовать гораздо более удобныйнуль-условный оператор:

var s = i?.ToString();
К сожалению ... На этот раз я извиняюсь - просто хотел создать более общую версию моего ответа :) Я не скопировал ваш!
Мне нужен параметр formatProvider для десятичного типа, поэтому удаленная универсальная версия, чтобы специализироваться на десятичном расширении, как мой ответ вstackoverflow.com/a/47835010/1830909К сожалению, вы не можете написать метод в комментарии и должны быть написаны как новый ответ, у вас есть идея получше?
Это хорошо :-)
1

Я думаю

string s = i?.ToString();

короче

Да! +1. Но вы должны оценить, что этот вопрос был задан и получен ответ до того, как этот оператор был доступен на языке. Тем не менее, я также обновил свой ответ.
Да, было известно, что вопрос предшествует доступности оператора. Просто подумал, что я его выброшу, если это кому-нибудь пригодится.
8

public static string ToNullString(this int? i)
{
   return i.HasValue ? i.ToString() : null;
}

Использование будет более простым:

string s = i.ToNullString();

Или общая версия:

public static string ToNullString<T>(this Nullable<T> value)
    where T : struct
{
    if (value == null)
        return null;

    return value.ToString();
}
Хорошо, я +1 вам, чтобы я не чувствовал себя так плохо из-за того, что меня выбрали ... Даже если меня не выберут, это нормально ...
@Clodoaldo на самом деле он не :)
Прошу прощения за добавление аналогичного ответа, просто я подумал о более общей версии, чем ваша ....
Нет смысла сохранять мой ответ таким же, как и у вас, в гораздо более чистом методе расширения +1.
-1

поэтому удалена универсальная версия, чтобы специализироваться на десятичном расширении, как показано ниже:

public static string ToStringOrNull(this Nullable<decimal> nullable, string format = null)        
{
    string resTmp = "";
    if (nullable.HasValue)
    {
        if (format != null)
        {
            resTmp = nullable.Value.ToString(format);
        }
        else
        {
            resTmp = nullable.ToString();
        }
    }
    else
    {
        resTmp = "";
    }
    return resTmp;
}
nullableDecimal?.ToString(format) ?? ""
@ Jord & # xE3; o Да, у меня есть некоторое десятичное поле, которое можно обнулять в моих таблицах базы данных для этой цели в модели структуры сущности, определяемой как десятичное число со значением NULL. Для использования их в представлении веб-приложения их необходимо преобразовать в строку, и в качестве обнуляемого типа я не могу использовать стандартный метод ToString ().

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