In C#, two types of variables exist value types and reference types. Value type variables cannot be assigned null, whereas we can assign null to reference type variables. As the string is a reference type, it can be null. In this topic, we are going to learn about C# Nullable String.
To assign null to a value type, we need to use Nullable
Syntax with Explanation
The syntax to assign null to a string variable is as follows:
string str = null;
Here, str is a variable of type string, and ‘null’ is the keyword used to specify the null value. In the above statement, we directly assign null to string because it is a reference type and can hold a null value.
Nullable
Nullable<dataType> variableName = null;
Another way of using the Nullable type is as follows:
dataType? variableName = null;
The dataType is the above two statements is any value type data type, and variableName is the user-defined name given to the variable.
Nullable type in C# assigns null values to value type variables like type int, float, bool, etc., because they cannot store null values. On the other hand, we cannot use nullable with string or any other reference type variable because it can directly store a null value.
A nullable type is nothing but an instance of a struct System.Nullable
//below statement is valid because we can store null in nullable of bool
Nullable<bool> boolVal = null;
//below statement is not valid because we cannot store null in a variable of type bool
bool boolVal = null;
When we use the above statement, we will get an error saying, ‘Cannot convert null to bool because it is a non-nullable value type.’
Another way to create a nullable type is by using the ‘?’ operator, as shown below:
bool? boolVal = null;
Now, to access the value of a nullable type, we need to use GetValueOrDefault() method. With the help of this method, we will get the original assigned value if the value is not null. On the other hand, if the value is null, we will get the default value of zero.
Apart from this, we can use Nullable.HasValue to check whether the object has been assigned a value or not. If the object has been assigned a value, it will return true if the object does not contain any value.
We cannot use the nullable type with ‘var,’ and we cannot have the nested nullable type; it will give us a compile-time error.
Now, let us talk about the null string in C#. We can directly assign null to a string in C# and assign a string with ‘string. Empty’ read-only field, which represents that the string is empty.
We cannot call any methods on the null string and cannot use any string properties on the null string, whereas we can do the same with empty strings. For example, if we will check the length of an empty string using a string. Length property, then we will get the result as zero, whereas if we check the length of a null string, then we will get a runtime exception saying ‘System.NullReferenceException: Object reference not set to an instance of an object. We will get the same exception when we try to call any string method on a null string. This is because a null string is not an instance of a System. String. We can understand this with the help of the following statements:
Example for empty string:
string str = string.Empty; int a = str.Length; //the result of this statement will be zero
Example for null string:
string str = null; int a = str.Length; //this statement will give NullReferenceException
Different examples are mentioned below:
Example showing how to create a nullable type.
Code:
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(); } } }
Output:
For example, it creates a nullable type using the ‘?’ operator and checks whether it contains a value or not using HasValue.
Code:
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(); } }
Output:
Example to check whether a string is null, empty, or contains a value using IsNullOrEmpty() method.
Code:
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(); } }
Output:
In C#, the value type variables like variables of type int, float, bool, double, etc., cannot store null value, whereas the reference type variables like string can store null value. To store null value in value type variables, we can use Nullable
The above is the detailed content of C# Nullable String. For more information, please follow other related articles on the PHP Chinese website!