前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >c#中的可空类型和空合并操作符(Nullable Types 和 Null Coalescing Operator)

c#中的可空类型和空合并操作符(Nullable Types 和 Null Coalescing Operator)

作者头像
程序你好
发布2018-07-20 17:51:53
4K0
发布2018-07-20 17:51:53
举报
文章被收录于专栏:程序你好程序你好

在本文中,我们将讨论可空类型和空合并操作符以及如何在基于c#的代码中使用它们。

这是c#编程中的一个基本概念。在这里,我将解释可空类型,c#中的空合并操作符,以及如何在LINQ中使用该操作符。

c#中的数据类型分为两大类:值类型和引用类型。

值类型变量不能为空,但是我们可以在引用类型变量中指定一个空值。

让我们检查当我们给值类型赋空时将会发生什么。

因此,当我试图为一个整数分配一个空值时,它会显示以下错误:“不能将null转换为'Int',因为它是一个非空值类型。”

这是我们在编码时经常遇到的一种常见错误。

有两种方法可以解决这个问题:

  • Nullable<int> x = null;
  • int ? x = null;

上面展示了在c#中将非空值类型转换为空值类型的两种方法。由此,我们可以得出这样的结论:如果一个类型可以被赋值,或者可以赋值为null,那么这个类型就是可空的。默认情况下,所有引用类型,例如字符串,都是可空的,但是所有的值类型,如Int32,都不是。

可空类型有两个成员。

1、 HasValue:HasValue是布尔值类型。当变量包含非空值时,它将被设置为true。

代码语言:c#
复制
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: 是个对象类型。它包含可空类型存储的数据。

代码语言:c#
复制
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

Null-collation(??)是c#中的一个重要运算符。根据MSDN的定义:?操作符称为null-coalescing操作符,用于为可空值类型或引用类型定义一个默认值。它返回左操作数,如果操作数不为空;否则,它返回正确的操作数。cnull合并运算符(??)是一个二元运算符,它简化了对Null值的检查。它用于在值为空时为变量分配一个默认值。

代码语言:c#
复制

class Program  
    {  
        static void Main(string[] args)  
        {  
            string name = null;  
            string myname = name ?? "Laxmi";  
            Console.WriteLine(myname);  
            Console.ReadLine();  
        }  
    }

这里的输出是Laxmi。这是因为变量名为null, null合并操作符检查空值。如果它为空,那么它将分配默认值。

在属性中,我们也可以使用像这样的空合并运算符。

代码语言:c#
复制
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中使用的。

代码语言:c#
复制
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合并运算符。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-06-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序你好 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Null-Collation
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档