zoukankan      html  css  js  c++  java
  • 可空值类型

    C#中的可空值类型

    C#不允许把NULL值赋给一个值类型,以下语法是错误的

    int i a =null;

    但是,利用 C# 定义的一个修饰符,可将一个变量声明为一个可空(nullable)值类型。可空值类型在行为上与普通值类型相似,但可以将一个 null 值赋给它。如下所示:

    int? a = null;      // 合法

    当把一个变量定义为可空值类型时,该变量依然可以被赋值为 0,代码如下所示:

    using System.Collections.Generic;  
    using System.Linq;  
    using System.Text;  
      
    namespace 可空类型  
    {  
        class Program  
        {  
            static void Main(string[] args)  
            {  
                int? a = null;  
      
                Console.WriteLine("a = {0}", a);  
                a = 0;  
                Console.WriteLine("a = {0}", a);  
            }  
        }  

    C# 8中基本数据类型的可空值类型

    C# 8中基本数据类型除了 string (string是引用类型)外,int、long、float、double、decimal、char、bool (这7中都是值类型)都可以声明为可空值类型。且在方法中使用时,参数位置也没有可空值类型必须在非可空值类型后面的限制,可空值类型可以定义在方法参数列表的前中后任何位置。

            struct(结构) 类型是值类型,也可以声明为可空值类型。

            对于 string 类型,可以用 string.Empty 输出空值。另外,除了 string.Empty 外,string 类型也可直接赋值为 null。如下:

    string str = null;  // 合法  
    string str = string.Empty;  // 合法  
    using System.Collections.Generic;  
    using System.Linq;  
    using System.Text;  
      
    namespace 可空类型  
    {  
        class Program  
        {  
            static void Main(string[] args)  
            {  
                Student student1 = new Student();  
      
                student1.StudentInformation(12, "boy", 18, 180, 86.0F,   
                    90.0, 95.0M, 85.0F, "Steven", 'A', true, 168);  
      
                Console.WriteLine();  
      
                student1.StudentInformation(12, "boy", null, null, null,   
                    null, null, 85.0F, "Steven", null, null, 168);  
      
                Console.WriteLine();  
      
                student1.StudentInformation(12, string.Empty, null, null, null,       
                    null, null, 85.0F, string.Empty, null, null, 168);  
      
                    // 对于 string 类型,可以用 string.Empty 输出空值  
      
                Console.WriteLine();  
      
                student1.StudentInformation(12, null, null, null, null,  
                    null, null, 85.0F, null, null, null, 168);  
      
                    // 把 赋值给 string 类型的 string.Empty   
                    // 换成 null 后可得到同样的输出  
            }  
        }  
      
        class Student  
        {  
            //public Student()  
            //{  
            // 默认构造器注释掉,依然可以运行,实际上程序会自己建一个隐藏的默认构造器  
            //}         
            public void StudentInformation(  
                int schoolAge,  
                string sex,  
                int? age,  
                long? height,  
                float? mathScore,  
                double? biologyScore,  
                decimal? geographyScore,  
                float artScore,  
                string name,  
                char? scoreGrade,  
                bool? passed,   
                int ID)  
            {  
                Console.WriteLine("Name:            {0}", name);  
                Console.WriteLine("ID:              {0}", ID);  
                Console.WriteLine("Sex:             {0}", sex);  
                Console.WriteLine("Age:             {0}", age);  
                Console.WriteLine("SchoolAge:       {0}", schoolAge);  
                Console.WriteLine("Height:          {0}", height);  
                Console.WriteLine("MathScore:       {0}", mathScore);  
                Console.WriteLine("ArtScore:        {0}", artScore);  
                Console.WriteLine("BiologyScore:    {0}", biologyScore);  
                Console.WriteLine("GeographyScore:  {0}", geographyScore);  
                Console.WriteLine("ScoreGrade:      {0}", scoreGrade);  
                Console.WriteLine("Passed:          {0}", passed);  
            }  
        }  
    }
  • 相关阅读:
    贪心法解活动安排问题
    求两个等长的已排序数组的中位数(《算法导论》P113习题9.3-8)
    0-1背包问题
    动态规划法解最长公共子序列问题
    动态规划法解矩阵链乘问题
    常见的算法设计策略
    A*算法与8数字谜题(参见《算法》P226习题2.5.32)
    keepalive+redis 主从高可用
    sharding-jdbc 读写分离+水平分表
    hash一致算法原理
  • 原文地址:https://www.cnblogs.com/MiyaQian/p/4159324.html
Copyright © 2011-2022 走看看