我有三个属性如下: -
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()只会在空字符串sj.CPUNAME.ToString();
上引发一个异常,所以如果我尝试转换ToString()
或者double?
或long?
,我可以解释为什么if (airPlanePlayerRigidbody2D.velocity.y < 0) { //falling
var myNewQuaternion = Quaternion.Euler (new Vector3 (0, 0, -30));
var myQuaternion = Quaternion.Euler(new Vector3(transform.rotation.eulerAngles.x, transform.rotation.eulerAngles.y, transform.rotation.eulerAngles.z));
transform.rotation = Quaternion.Slerp (myQuaternion , myNewQuaternion , speed );
}
else if (airPlanePlayerRigidbody2D.velocity.y > 0) { // rising
var myNewQuaternion = Quaternion.Euler (new Vector3 (0, 0, 30));
var myQuaternion = Quaternion.Euler(new Vector3(transform.rotation.eulerAngles.x, transform.rotation.eulerAngles.y, transform.rotation.eulerAngles.z));
transform.rotation = Quaternion.Slerp (myQuaternion , myNewQuaternion , speed );
}
不会引发异常var customers = testing();
foreach (CustomerMain customer in customers)
{
// access customer.FirstName
}
包含字符串的空值,但只有在字符串为空时才会引发空引用异常?
答案 0 :(得分:7)
简化它:
int? x = null;
string result = x.ToString(); // No exception
此处null
不是引用。它只是int?
类型的空值,即类型Nullable<int>
的值HasValue
为假。
您只是在该值上调用Nullable<T>.ToString()
方法。不涉及空引用,因此没有NullReferenceException
。该行为记录为:
如果
Nullable<T>
属性为true,则为当前HasValue
对象的值的文本表示形式;如果为HasValue
,则为空字符串(&#34;&#34;)财产是假的。
换句话说,它有效地实现为:
return HasValue ? Value.ToString() : "";
请注意,这只适用于编译时类型是可以为空的类型。
如果你最终装箱一个空值,你最终会得到一个空引用:
object y = x; // Oh noes, now y is a null reference...
string bang = y.ToString(); // so this throws!
答案 1 :(得分:1)
Nullable<T>
本身不能为空,其值可以。例如,您可以将其ToString
方法实现为:
public string override ToString()
{
if (this.HasValue) return this.Value;
else return string.Empty;
}
你不能对string
做同样的事情,因此如果字符串为空,则会引发NullReferenceException
。
答案 2 :(得分:0)
MSDN Help对此非常明确。
当前Nullable对象的值的文本表示 如果HasValue属性为true,或者为空字符串(“”)如果为 HasValue属性为false。