
C# Nullable String简介
在C#中,存在两种类型的变量,即值类型和引用类型。值型变量不能被赋值为空,而我们可以为引用型变量赋值为空。由于字符串是一个引用类型,所以它可以为空。在本专题中,我们将学习C#可置空字符串。
为了给一个值类型赋值为空,我们需要使用Nullable结构。nullable类型只能用于值类型,不能用于引用类型。因此,我们不能对字符串使用nullable。要存储一个空值,我们可以使用nullable类型而不是引用类型。
语法与解释
为字符串变量赋值null的语法如下:
string str = null;
这里,str是一个字符串类型的变量,'null'是用来指定null值的关键字。在上面的语句中,我们直接将null赋值给string,因为它是一个引用类型,可以容纳一个空值。
要将null赋值给一个值类型,将使用Nullable结构。其语法如下:
Nullable<dataType> variableName = null;
另一种使用Nullable类型的方式如下:
dataType? variableName = null;
上面两个语句中的dataType是任何值类型的数据类型,variableName是给变量的用户定义的名称。
如何在C#中使用Nullable类型和空字符串?
C#中的Nullable类型是用来给值型变量分配空值的,比如int、float、bool等类型的变量,因为它们不能存储空值。另一方面,我们不能将nullable用于字符串或任何其他引用类型的变量,因为它可以直接存储空值。
Nullable类型只不过是System.Nullable结构的一个实例,其中T代表数据类型的一个值类型。例如,在nullable类型的float中,我们可以存储'真'、'假'和'空'。我们可以通过下面的语句来理解这一点。
//下面的语句是有效的,因为我们可以在bool的nullable中存储null。
Nullable<bool> boolVal = null;
//下面的语句是无效的,因为我们不能在bool类型的变量中存储null。
bool boolVal = null;
当我们使用上述语句时,我们会得到一个错误,说:"不能将null转换为bool,因为它是一个不可置换的值类型。
另一种创建nullable类型的方法是使用"?"操作符,如下所示。
bool? boolVal = null;
现在,要访问一个可空类型的值,我们需要使用GetValueOrDefault()方法。在这个方法的帮助下,如果值不是空的,我们将得到原来分配的值。另一方面,如果值为空,我们将得到默认值0。
除此之外,我们可以使用Nullable.HasValue来检查对象是否被赋值。如果对象已经被分配了一个值,如果对象不包含任何值,它将返回true。
我们不能将nullable类型与'var'一起使用,也不能有嵌套的nullable类型;它将给我们一个编译时错误。
现在,让我们来谈谈C#中的null字符串。在C#中,我们可以直接将null赋值给一个字符串,我们也可以用'string.Empty "的只读字段,它表示该字符串是空的。
我们不能在空字符串上调用任何方法,也不能在空字符串上使用任何字符串属性,而我们可以对空字符串做同样的事情。例如,如果我们使用string.Length属性检查一个空字符串的长度,那么我们将得到一个结果。而如果我们检查一个空字符串的长度,那么我们将得到的结果是零,而如果我们检查一个空字符串的长度,那么我们将得到运行时异常,即 "System.NullReferenceException:对象引用没有设置为一个对象的实例"。当我们试图在一个空字符串上调用任何字符串方法时,我们会得到同样的异常。这是因为空字符串不是System.String的实例。字符串的实例。我们可以借助下面的语句来理解这一点。
空字符串的例子:
string str = string.Empty;
int a = str.Length; //the result of this statement will be zero
string str = null;
int a = str.Length; //this statement will give NullReferenceException
C#可空字符串的例子
下面提到了不同的例子。
例子#1
示例显示了如何创建一个可空类型。
代码
using System;
namespace ConsoleApp4
{
public class Program
{
public static void Main()
{
try
{
//defining nullable type for int
Nullable<int> intVal1 = null;
int result1;
Nullable<int> intVal2 = 53;
int result2;
//using GetValueOrDefault()
//to get value from nullable type
result1 = intVal1.GetValueOrDefault();
result2 = intVal2.GetValueOrDefault();
Console.WriteLine("Integer having null: {0}", result1);
Console.WriteLine("Integer having value: {0}", result2);
}
catch(Exception exception)
{
Console.WriteLine(exception.Message);
Console.ReadLine();
}
Console.ReadLine();
}
}
}
输出

例子 #2
例如,它正在使用'?'操作符创建一个nullable类型,并使用HasValue检查它是否包含一个值。
代码
using System;
public class Program
{
public static void Main()
{
try
{
//defining nullable type
//using '?' operator
int? intVal1 = null;
bool result1;
int? intVal2 = 53;
bool result2;
//using HasValue to check
// if the object has been assigned a value or not
result1 = intVal1.HasValue;
result2 = intVal2.HasValue;
Console.WriteLine("Integer having null: {0}", result1);
Console.WriteLine("Integer having value: {0}", result2);
}
catch (Exception exception)
{
Console.WriteLine(exception.Message);
Console.ReadLine();
}
Console.ReadLine();
}
}
输出

例子 #3
例子是使用IsNullOrEmpty()方法检查一个字符串是否为空,空,或包含一个值。
代码
using System;
public class Program
{
public static void Main()
{
string str1 = null;
string str2 = string.Empty;
string str3 = "Learning C#";
Console.WriteLine("str1 is null or empty: {0}", string.IsNullOrEmpty(str1));
Console.WriteLine("str2 is null or empty: {0}", string.IsNullOrEmpty(str2));
Console.WriteLine("str3 is null or empty: {0}", string.IsNullOrEmpty(str3));
Console.ReadLine();
}
}
输出

结论
在C#中,值型变量如int、float、bool、double等类型的变量不能存储空值,而引用型变量如string可以存储空值。为了在值型变量中存储空值,我们可以使用Nullable结构。