1.24.1. C# single question mark
?
and double question mark
??
#
?
single question mark is used for
int
、
double
、
bool
and so on, which cannot be directly assigned to
null
data type of
null
, which means that this data type is
Nullable
type.
int? i = 3;
Equivalent to:
Nullable<int> i = new Nullable<int>(3);
int i; //Default value 0
int? ii; //Default value is null
The double question mark
??
is used to determine whether a variable is
null
,which returns a specified value.
Next, we will explain in detail.
1.24.2. C # nullable type #
C # provides a special data type
nullable
type, a nullable type can represent a value within the normal range of its underlying value type, plus a null value.
For example,
Nullable<
Int32
>
, pronounced “nullable Int32”, can be assigned any value between-2147483648 and 2147483647, or can be assigned to
null
Value. Similar
Nullable<
bool
>
Variables can be assigned to
true
or
false
or
null
.
When working with databases and other data types that contain elements that may not be assigned, set the
null
ability to assign values to numeric or Boolean types is particularly useful. For example, Boolean fieldsin a database can store values
true
or
false
, the field can beundefined.
Declare a
nullable
syntax for a type (nullable type) is as follows:
< data_type> ? <variable_name> = null;
The following example demonstrates the use of nullable data types:
1.24.3. Example #
using System;
namespace CalculatorApplication
{
class NullablesAtShow
{
static void Main(string[] args)
{
int? num1 = null;
int? num2 = 45;
double? num3 = new double?();
double? num4 = 3.14157;
bool? boolval = new bool?();
// Display value
Console.WriteLine("Display values of nullable types: {0}, {1}, {2}, {3}",
num1, num2, num3, num4);
Console.WriteLine("A nullable Boolean value: {0}", boolval);
Console.ReadLine();
}
}
}
When the above code is compiled and executed, it produces the following results:
Display values of nullable types: , 45, , 3.14157
A nullable Boolean value:
1.24.4. The Null merge operator (
??
) #
The merge operator
Null
is used to define default values for nullable and reference types.
Null
merge operator defines a default value for type conversion in case the value of a nullable type is
Null
.
Null
merge operator implicitly converts an operand type to an operand ofanother nullable (or non-nullable) value type.
If the value of the first Operand is When the above code is compiled and executed, it produces the following results:
null
, the operator returns the value of the second operand, otherwise the value of the first operand is returned. The following example demonstrates this:Example #
using System;
namespace CalculatorApplication
{
class NullablesAtShow
{
static void Main(string[] args)
{
double? num1 = null;
double? num2 = 3.14157;
double num3;
num3 = num1 ?? 5.34; // num1 If it is a null value, return 5.34
Console.WriteLine("The value of num3: {0}", num3);
num3 = num2 ?? 5.34;
Console.WriteLine("The value of num3: {0}", num3);
Console.ReadLine();
}
}
}
Value of num3: 5.34
Value of num3: 3.14157