将nullable decimal(decimal?)转换为string时,无法显式指定字符串转换中的区域性

时间:2012-01-30 06:44:52

标签: c# nullable cultureinfo non-nullable

我有一个属性:

public decimal? DejanskaKolicina { get; set; }

和Resharper告诉我:

  

明确指定字符串转换中的文化

但如果我使用:

DejanskaKolicina.ToString(CultureInfo.CurrentCulture) 

我总是得到以下信息:

  

ToString方法有0个参数但是用1个参数调用

如果我更改小数属性以使其不再可为空,那么它可以工作。如何在可空属性上使用ToString(CultureInfo.CurrentCulture)

4 个答案:

答案 0 :(得分:7)

ToString仅存在特定的decimal重载,因此您只需为decimal调用它即可使其工作:

DejanskaKolicina == null ? String.Empty : DejanskaKolicina.Value.ToString(CultureInfo.CurrentCulture)

答案 1 :(得分:3)

您应该单独处理null,如下所示:

DejanskaKolicina == null ? "N/A" : DejanskaKolicina.Value.ToString(CultureInfo.CurrentCulture)  

答案 2 :(得分:0)

使用可空对象的Value属性:

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

答案 3 :(得分:0)

我想,这个例子可以帮到你:

可以使用可空类型,与使用常规值类型的方式相同。实际上,内置的隐式转换用于在相同类型的可空和非可空变量之间进行转换。这意味着您可以将标准整数分配给可以为空的整数,反之亦然:

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.

在查看上面的语句时,只要可空变量不包含null,就可以看到可空和不可变的变量可以交换值。如果它包含null,则抛出异常。为了避免抛出异常,您可以使用可空的HasValue属性:

if (nFirst.HasValue) Second = nFirst;

如您所见,如果nFirst有值,则会发生分配;否则,将跳过作业。