[asp.net-mvc].Tostring () 不会引发异常双吗?或长吗?虽然它会引发一个异常对空字符串

发布时间: 2017/3/25 0:47:48
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有三个属性如下:-

public Nullable<double> SPEED { get; set; }
public Nullable<Int64> PROCESSORCOUNT { get; set; }
public string CPUNAME { get; set; }

现在里面我 asp.net mvc5 web 应用程序的控制器类中,如果我传递 null 为上述三个变量,如下:-

query["proSpeed"] = sj.SPEED.ToString();
query["proCores"] = sj.PROCESSORCOUNT.ToString();
query["proType"] = sj.CPUNAME.ToString();

然后 tostring () 只会引发对 null 字符串异常主要 sj.CPUNAME.ToString(); ,所以会有人寄为什么 ToString() 会不会引发异常,如果我试着转换 double?long? ,包含空值的字符串,但只有如果字符串为空,它将引发 null 引用异常吗?

解决方法 1:

为了简化它︰

int? x = null;
string result = x.ToString(); // No exception

在这里 null 不是空引用。它是只是一个空的值类型的 int? ,即类型的值 Nullable<int>HasValue 是假的。

你只需在调用 Nullable<T>.ToString() 方法对该值。没有空的引用都参与其中,因此有没有 NullReferenceException 。行为是作为记录的︰

当前值的文本表示形式 Nullable<T> 对象如果 HasValue 属性是 true,则为空字符串 ("") 如果 HasValue 属性为 false。

换句话说,它是作为有效地实现︰

return HasValue ? Value.ToString() : "";

注意,这仅适用是否编译时类型为 null 的类型。

如果你放弃拳击一个 null 值,那么你会得到空引用︰

object y = x;               // Oh noes, now y is a null reference...
string bang = y.ToString(); // so this throws!
赞助商