1 Introduction of nullable types
The declarative method for a nullable type is to add a question mark "?" above the underlying type.
int ? i;i=ten;
In C #, only value types have nullable types (reference types can take null values), including system-predefined integer types, character types, real types, Boolean types, and various struct types and enumeration types.
2 Generic Structure Nullabletype
2.1 Overview
. NET is how to implement a nullable type? One scenario is to define a new nullable type for each value type, but this is a lot of work and there is no extensibility: The new value types defined by the developer are not eligible for this benefit unless they define value types and nullable types in pairs each time.
. NET class library takes advantage of the power of generics to implement a nullable type for all value types once and for all. A generic structure NULLABLETYPE<T> is defined in system, and the previous section is actually a shorthand for nullable types. Int? Equivalent to nullabletype<int>. Nullabletype<t> 's shorthand way is T?
This shorthand method can be used for both nullable type declarations and for nullable type constructs. The generic struct nullabletype<t> can actually be defined as a prototype of a constructor that is public nullable<t>, so you can use the following code to construct an instance of a nullable type:
int New int ? (5); // i=5; nullable<intnew nullable<int> (ten); // j=10; New Datetime? (DateTime.Now); // Dt=now
However, this approach does not apply to null cases where the parameter type of the Nullabletype<t> constructor is called T. The following code is not valid:
int ? i=newint? (null); // Error
A nullable type is a compound of a value type and null value, but it is essentially a value type. A variable of a nullable type is also the data that directly contains itself, not a reference to the target data. Therefore, a nullable type can itself be used as an underlying type to construct a new nullable type. The following code is legal:
int Ten ; int?? j = I; int??? K = J; Nullable<double3.14; Nullable<Nullbale<double>> y=x;
2.2 Judging and taking values
Given a variable of a nullable type, you know that it is not null, and can be determined by nullabletype<t> common property hasvalue. The property is a Boolean value.
Another public property of the nullabletype<t> value is the type T, which represents the value of the underlying type that the nullable type corresponds to. This property is valid only if the variable is not a null value, so check to see if the value of the property HasValue is true before accessing it. For example, the following code throws an exception:
int NULL ; Console.WriteLine (i.value);
The correct wording is:
if (I.hasvalue) Console.WriteLine (i.value);
HasValue and value
The tenth chapter is nullable type