joh*_* Gu 0 .net c# asp.net asp.net-mvc asp.net-mvc-5
我有三个属性如下: -
public Nullable<double> SPEED { get; set; }
public Nullable<Int64> PROCESSORCOUNT { get; set; }
public string CPUNAME { get; set; }
Run Code Online (Sandbox Code Playgroud)
现在在我的asp.net mvc5 web应用程序的控制器类中,如果我为上述三个变量传递null,如下: -
query["proSpeed"] = sj.SPEED.ToString();
query["proCores"] = sj.PROCESSORCOUNT.ToString();
query["proType"] = sj.CPUNAME.ToString();
Run Code Online (Sandbox Code Playgroud)
那么toString()只会主要在空字符串上引发一个异常sj.CPUNAME.ToString();,所以任何人都可以为什么ToString()不尝试在我尝试转换double?或long?包含null值的情况下引发异常,但是只有当它被引发时才会引发空引用异常string是null?
为了简化它:
int? x = null;
string result = x.ToString(); // No exception
Run Code Online (Sandbox Code Playgroud)
这里null不是空引用.这类型的只是一个空值int?,也就是类型的值Nullable<int>,其中HasValue是假的.
您只是Nullable<T>.ToString()在该值上调用该方法.没有涉及空引用,所以没有NullReferenceException.该行为记录为:
Nullable<T>如果HasValue属性为true,则为当前对象的值的文本表示; 如果属性为false,则为空字符串("")HasValue.
换句话说,它有效地实现为:
return HasValue ? Value.ToString() : "";
Run Code Online (Sandbox Code Playgroud)
请注意,这仅在编译时类型为可空类型时才有效.
如果你最终装箱一个空值,你最终会得到一个空引用:
object y = x; // Oh noes, now y is a null reference...
string bang = y.ToString(); // so this throws!
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
129 次 |
| 最近记录: |