在本文中,我们将讨论可空类型和空合并操作符以及如何在基于c#的代码中使用它们。
这是c#编程中的一个基本概念。在这里,我将解释可空类型,c#中的空合并操作符,以及如何在LINQ中使用该操作符。
c#中的数据类型分为两大类:值类型和引用类型。
值类型变量不能为空,但是我们可以在引用类型变量中指定一个空值。
让我们检查当我们给值类型赋空时将会发生什么。
因此,当我试图为一个整数分配一个空值时,它会显示以下错误:“不能将null转换为'Int',因为它是一个非空值类型。”
这是我们在编码时经常遇到的一种常见错误。
有两种方法可以解决这个问题:
上面展示了在c#中将非空值类型转换为空值类型的两种方法。由此,我们可以得出这样的结论:如果一个类型可以被赋值,或者可以赋值为null,那么这个类型就是可空的。默认情况下,所有引用类型,例如字符串,都是可空的,但是所有的值类型,如Int32,都不是。
可空类型有两个成员。
1、 HasValue:HasValue是布尔值类型。当变量包含非空值时,它将被设置为true。
static void Main(string[] args)
{
int? x = 5;
if(x.HasValue)
{
Console.WriteLine("contain not nullable value.");
}
else
{
Console.WriteLine("contain Null value.");
}
Console.ReadLine();
}
因此输出将包含一个非空值。
2、Value: 是个对象类型。它包含可空类型存储的数据。
static void Main(string[] args)
{
int? x = 5;
if(x.HasValue)
{
Console.WriteLine(x.Value.ToString());
}
else
{
Console.WriteLine("contain Null value.");
}
Console.ReadLine();
这里输出是-5。
这都是关于c#中的可空类型。
接下来我将讨论c#中的空合并运算符(Null Coalescing operator) 。
Null-collation(??)是c#中的一个重要运算符。根据MSDN的定义:?操作符称为null-coalescing操作符,用于为可空值类型或引用类型定义一个默认值。它返回左操作数,如果操作数不为空;否则,它返回正确的操作数。cnull合并运算符(??)是一个二元运算符,它简化了对Null值的检查。它用于在值为空时为变量分配一个默认值。
class Program
{
static void Main(string[] args)
{
string name = null;
string myname = name ?? "Laxmi";
Console.WriteLine(myname);
Console.ReadLine();
}
}
这里的输出是Laxmi。这是因为变量名为null, null合并操作符检查空值。如果它为空,那么它将分配默认值。
在属性中,我们也可以使用像这样的空合并运算符。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace NullCollation
{
class employee
{
}
class Program
{
static string _name;
static string Name
{
get
{
return _name ?? "Kailash";
}
set
{
_name = value;
}
}
public int age { get; set; }
static void Main(string[] args)
{
Console.WriteLine(Name);
Console.ReadLine();
}
}
}
现在我向你们展示这个运算符是如何在LINQ中使用的。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace NullCollation
{
public class Employee
{
public int Id { get; set; }
public int age { get; set; }
public string name { get; set; }
public string gender { get; set; }
}
class Program
{
static void Main(string[] args)
{
List<Employee> li = new List<Employee>();
li.Add(new Employee { Id = 1, age = 19,
name = "Ritesh", gender = "M" });
li.Add(new Employee { Id = 2, age = 20,
name = "sujit", gender = "M" });
li.Add(new Employee { Id = 3, age = 23,
name = "Kabir", gender = "F" });
li.Add(new Employee { Id = 4, age = 3,
name = null, gender = "F" });
li.Add(new Employee { Id = 5, age = 24,
name = "Kamlesh", gender = "M" });
li.Add(new Employee { Id = 6, age = 28,
name = "Manoj", gender = "M" });
var Data = from emp in li where emp.Id == 4 select new {
Name = emp.name ?? "No name" };
foreach (var obj in Data)
{
Console.WriteLine(obj.Name);
}
Console.ReadLine();
}
}
}
通过这种方式,我们可以在LINQ查询中使用null合并运算符。