C# Nullable学习
发布人:shili8
发布时间:2024-11-14 00:38
阅读次数:0
**Nullable 的学习**
在 C# 中,Nullable 是一个非常重要的特性,它允许我们将值类型(如 int、float 等)转换为引用类型,使得它们可以存储 null 值。这种机制使得我们的程序更加灵活和安全。
### Nullable 的定义Nullable 是一个泛型接口,它有两个泛型参数:T 和 T?,其中 T 是值类型,而 T? 是 T 的 nullable 版本。
csharppublic interface INullable: IComparable { bool HasValue { get; } T Value { get; } }
### Nullable 的使用Nullable 的使用非常简单,我们只需要将其应用到值类型上即可。例如:
csharpint? x = null; x =10; Console.WriteLine(x.HasValue); // 输出:TrueConsole.WriteLine(x.Value); // 输出:10
在这个例子中,我们定义了一个 nullable 的 int 变量 `x`,它可以存储 null 值或 int 值。我们先将其设置为 null,然后将其设置为10。
### Nullable 的转换Nullable 有两种转换方式:
1. **非空转换**:当我们将 nullable 值类型转换为非nullable 值类型时,会发生非空转换。如果 nullable 值类型的值不为空,则转换成功;否则,将抛出异常。
csharpint x = (int)10; // 正常转换try{ int y = (int)null; // 抛出异常} catch (InvalidOperationException ex) { Console.WriteLine(ex.Message); // 输出:Value cannot be null. }
2. **空转换**:当我们将 nullable 值类型转换为非nullable 值类型时,会发生空转换。如果 nullable 值类型的值为空,则转换成功;否则,将抛出异常。
csharpint? x =10; try{ int y = (int?)null; // 抛出异常} catch (InvalidOperationException ex) { Console.WriteLine(ex.Message); // 输出:Value cannot be null. } x = null; int z = (int?)x; // 正常转换
### Nullable 的运算Nullable 支持基本的运算,如加法、减法等。
csharpint? x =10; int? y =20; Console.WriteLine(x + y); // 输出:30Console.WriteLine(x - y); // 输出:-10
### Nullable 的比较Nullable 支持基本的比较,如等于、不等于等。
csharpint? x =10; int? y =20; Console.WriteLine(x == y); // 输出:FalseConsole.WriteLine(x != y); // 输出:True
### Nullable 的转换为其他类型Nullable 可以转换为其他类型,如 string、object 等。
csharpint? x =10; string s = x.ToString(); // 输出:"10" object o = x; // 正常转换
### Nullable 的转换为值类型Nullable 可以转换为值类型,如 int、float 等。
csharpint? x =10; int y = (int)x; // 正常转换float z = (float)x; // 正常转换
### Nullable 的使用注意事项在使用 Nullable 时,需要注意以下几点:
1. **非空转换**:当我们将 nullable 值类型转换为非nullable 值类型时,会发生非空转换。如果 nullable 值类型的值不为空,则转换成功;否则,将抛出异常。
csharpint x = (int)10; // 正常转换try{ int y = (int)null; // 抛出异常} catch (InvalidOperationException ex) { Console.WriteLine(ex.Message); // 输出:Value cannot be null. }
2. **空转换**:当我们将 nullable 值类型转换为非nullable 值类型时,会发生空转换。如果 nullable 值类型的值为空,则转换成功;否则,将抛出异常。
csharpint? x =10; try{ int y = (int?)null; // 抛出异常} catch (InvalidOperationException ex) { Console.WriteLine(ex.Message); // 输出:Value cannot be null. } x = null; int z = (int?)x; // 正常转换
3. **运算注意事项**:在进行运算时,需要注意 nullable 值类型的值是否为空。如果为空,则将抛出异常。
csharpint? x =10; try{ int y = (int?)null; // 抛出异常} catch (InvalidOperationException ex) { Console.WriteLine(ex.Message); // 输出:Value cannot be null. } x = null; int z = (int?)x; // 正常转换
4. **比较注意事项**:在进行比较时,需要注意 nullable 值类型的值是否为空。如果为空,则将抛出异常。
csharpint? x =10; try{ int y = (int?)null; // 抛出异常} catch (InvalidOperationException ex) { Console.WriteLine(ex.Message); // 输出:Value cannot be null. } x = null; int z = (int?)x; // 正常转换
5. **转换注意事项**:在进行转换时,需要注意 nullable 值类型的值是否为空。如果为空,则将抛出异常。
csharpint? x =10; try{ int y = (int?)null; // 抛出异常} catch (InvalidOperationException ex) { Console.WriteLine(ex.Message); // 输出:Value cannot be null. } x = null; int z = (int?)x; // 正常转换
### Nullable 的总结Nullable 是一个非常重要的特性,它允许我们将值类型(如 int、float 等)转换为引用类型,使得它们可以存储 null 值。这种机制使得我们的程序更加灵活和安全。在使用 Nullable 时,需要注意非空转换、空转换、运算注意事项、比较注意事项和转换注意事项等问题。
### Nullable 的参考* [Nullable]( />* [Nullable Reference Types in C#]( />* [C# Nullable Reference Types](