7

我有一个财产:

public decimal? DejanskaKolicina { get; set; }

Resharper 向我展示了:

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

但如果我使用:

DejanskaKolicina.ToString(CultureInfo.CurrentCulture) 

我总是收到这样的信息:

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

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

4

4 回答 4

7

该特定ToString重载仅存在于 a decimal,因此您可以通过仅调用 a 来使其工作decimal

DejanskaKolicina == null ? String.Empty : DejanskaKolicina.Value.ToString(CultureInfo.CurrentCulture)
于 2012-01-30T06:49:48.033 回答
3

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

DejanskaKolicina == null ? "N/A" : DejanskaKolicina.Value.ToString(CultureInfo.CurrentCulture)  
于 2012-01-30T06:50:42.927 回答
0

使用可为空对象的 Value 属性:

DejanskaKolicina == null ? "" : DejanskaKolicina.Value.ToString(CultureInfo.CurrentCulture);
于 2012-01-30T06:49:35.127 回答
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,则抛出异常。为了帮助避免引发异常,您可以使用 nullable 的 HasValue 属性:

if (nFirst.HasValue) Second = nFirst;

正如你所看到的,如果 nFirst 有一个值,就会发生赋值;否则,分配被跳过。

于 2012-01-30T06:56:15.330 回答