Невозможно явно указать культуру в строковом преобразовании при преобразовании дробного десятичного числа (десятичного числа?) В строку - PullRequest
7 голосов
/ 30 января 2012

У меня есть свойство:

public decimal? DejanskaKolicina { get; set; }

, и Resharper показывает мне:

явно указывает культуру преобразования строк

Но если яuse:

DejanskaKolicina.ToString(CultureInfo.CurrentCulture) 

Я всегда получаю сообщение, что:

Метод ToString имеет 0 параметров, но он вызывается с 1 аргументом

Если я изменю десятичное свойство так, чтобы оно больше не могло обнуляться, оно работает.Как использовать ToString(CultureInfo.CurrentCulture) для свойства nullable?

Ответы [ 4 ]

7 голосов
/ 30 января 2012

Эта конкретная перегрузка ToString существует только для decimal, поэтому вы можете заставить ее работать, только вызывая ее для decimal:

DejanskaKolicina == null ? String.Empty : DejanskaKolicina.Value.ToString(CultureInfo.CurrentCulture)
3 голосов
/ 30 января 2012

Вы должны обрабатывать null отдельно, например:

DejanskaKolicina == null ? "N/A" : DejanskaKolicina.Value.ToString(CultureInfo.CurrentCulture)  
0 голосов
/ 30 января 2012

Я думаю, этот пример может вам помочь:

Обнуляемый тип может использоваться так же, как и обычный тип значения.Фактически, неявные преобразования встроены для преобразования между равной нулю и ненулевой переменной одного и того же типа.Это означает, что вы можете присвоить стандартное целое число пустому целому числу и наоборот:

int? nFirst = null;
int Second = 2; nFirst = Second; // Valid
nFirst = 123; // Valid
Second = nFirst; // Also valid
nFirst = null; // Valid
Second = nFirst; // Exception, Second is nonnullable.

Рассматривая вышеприведенные операторы, вы видите, что переменная, допускающая обнуляемое и ненулевое значение, может обмениваться значениями до тех пор, покатак как переменная Nullable не содержит ноль.Если он содержит ноль, генерируется исключение.Чтобы избежать исключения, вы можете использовать свойство HasValue для nullable:

if (nFirst.HasValue) Second = nFirst;

Как вы можете видеть, если nFirst имеет значение, присваивание произойдет;в противном случае назначение пропускается.

0 голосов
/ 30 января 2012

Используйте свойство Value обнуляемого объекта:

DejanskaKolicina == null ? "" : DejanskaKolicina.Value.ToString(CultureInfo.CurrentCulture);
...