在下面的代码中,我得到空引用异常,因为string为null -
,所以很好using System;
public class Test
{
static string r = null;
public static void Main()
{
string s = "";
try
{
s = r.ToString();
Console.Write("Successful");
}
catch(Exception ex)
{
Console.WriteLine("exception via using null int...." + ex);
}
Console.WriteLine(s);
}
}
输出:
exception via using null int....System.NullReferenceException: Object reference not set to an instance of an object
但是当我使用这段代码时,为什么我没有得到null引用异常? 可空整数变量是否具有空值?
using System;
public class Test
{
public static void Main()
{
string s = "";
int? i = null;
try
{
s = i.ToString();
Console.Write("Successful");
}
catch(Exception ex)
{
Console.WriteLine("exception via using null int...." + ex);
}
Console.WriteLine(s);
}
}
输出:
Successful
答案 0 :(得分:3)
int?
是值类型,而不是引用类型。仅为引用类型抛出NullReferenceException
。
答案 1 :(得分:1)
因为S是内存中的一个对象并且它包含一个零carathers的字符串,但是r只是调用计算机来占有一个位置,但你没有说它是否是字符串所以toString是不可能的
当使用值声明S时,编译器确保它是字符串的对象,并且它从对象String中获取所有字符串方法。
答案 2 :(得分:1)
如果您为其分配值,则在打印时是否包含实际值?应该通过
访问int?的值.Value
所以
int?.ToString()
应该打印一个类型,而不是它的值,所以这里的null就可以了,另见:C# Nullable Types and the Value property
答案 3 :(得分:1)
T?
表示法是System.Nullable<T>
的简写。此类型是结构,而不是引用类型,并且不能是null
。它有一个接受null
引用的构造函数,它的作用是创建包含null
的结构。