(.NET进阶三)C#6.0新特性学习(新初始化/静态引用/nameof/Null表达式)

本文深入探讨了C#的最新特性,包括自动属性的新初始方法、String.Format的改进、表达式应用的新特性、泛型集合的新初始方法、static声明静态类引用、nameof表达式以及Null操作符的使用,旨在帮助开发者提升代码效率与质量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、自动属性新初始方法

二、String.Format新用法

三、表达式应用的新特性

四、泛型集合的新初始方法

五、static声明静态类的引用

六、nameof表达式

七、Null操作符


一、自动属性新初始方法

namespace NewDemo
{
    //旧方法
    class Student
    {
        public Student()
        {
            StudentId = 1001;
            Name = "张三";
            Age = 25;
        }

        public int StudentId{get;set;}
        public string Name{get;set;}
        public int Age{get;set;}
        public string Gender
        {
            get{return Gender;}
        }
    }
    

    //新方法,声明的同时初始化,并且允许只读属性初始化
    class Student
    {
        public int StudentId{get;set;} = 1001;
        public string Name{get;set;} = "张三";
        public int Age{get;set;} = 25;
        public string Gender{get;} = "男";
    }

}

二、String.Format新用法

在字符串前面添加“$”前缀(变量可以直接写在{}内,并有很强的智能提示)

static void Main(string[] args0
{
    Student objStudent = new NewDemo.Student();
    string s1 = $"{objStudent.Name},{objStudent.Age}";
    string s2 = $"姓名={objStudent.Name},年龄={objStudent.Age}";
    Console.WriteLine($"{s1},\r\n{s2});
    
    //string s3 = string.Format("{0,10},{1:d3}",objStudent.Name,objStudent.Age);
    string s3 = $"{objStudent.Name,10},{objStudent.Age:d3}";
    //string s4 = string.Format("{0,10},{1,10:d3}",objStudent.Name,objStudent.Age);
    string s4 = $"{objStudent.Name,10},{objStudent.Age,10:d3}";
    Console.WriteLine($"{s3},\r\n{s4});

    string s5 = $"{DateTine.Now:yyyy-MM-dd}";
    Console.WriteLine(s5);
    
    //典型应用
    string sql = $"select Name from Students where StudentId = {objStudent.StudentId} and Age = {objStudent.Age}";

}

三、表达式应用的新特性

  1. 表达式属性:只有一个get访问器的单行属性可以使用lambda语法编写
    class ExpressionApp
    {
    
        public DateTime Birthday(get;set;) = Convert.ToDateTime("1990-1-10")
    
        //旧方法
        public int Age
        {
            get{return DateTime.Now.Year - Birthday.Year}
        }
        
        //新方法
        public int Age => DateTime.Now.Year - Birthday.Year;
    
    }

     

  2. 表达式方法:只有一条语句的方法可以使用lambda语法编写

    class ExpressionApp
    {
        //旧方法
        public int Add(int a,int b)
        {
            return a+b;
        }
        
        //新方法
        public int Add(int a,int b) => a+b;
    
    }

     

四、泛型集合的新初始方法

class NewCollectionInit
{
    //旧方法
    public Dictionary<string,int> OldMethod()
    {
        Dictionary<string,int> stu = new Dictionary<string,int>();
        stu.Add("张三",25);
        stu.Add("李四",30);
        stu.Add("王五",27);
        return stu;
    }
    
    //新方法
    public Dictionary<string,int> NewMethod()
    {
        Dictionary<string,int> stu = new Dictionary<string,int>()
        {
            ["张三"] = 25;
            ["李四"] = 30;
            ["王五"] = 27;
        };
        
        return stu;
    }

}

五、static声明静态类的引用

using static System.Math;

class StaticClassApp
{
    //旧方法:两数绝对值相加
    public static int OldMethod(int a,int b)
    {
        return Math.Abs(a) + Math.Abs(b);
    }
    
    //新方法:使用using static System.Math;提前引用静态类,避免每次都调用Math类
    public static int NewMethod(int a,int b)
    {
        return Abs(a) + Abs(b);
    }
    //简化
    public static int NewMethod2(int a,int b) => Abs(a) + Abs(b);

}

六、nameof表达式

class NameofExpressions
{
    //旧方法:当参数变化的时候,被引用的地方需要同步修改
    public void OldMethod(int account1)
    {
        if(account1 < 100)
        {
            throw new ArgumentException("参数account1值不能小于100");
        }
        else
        {
            //其他操作
        }
    }
    

    //新方法:使用nameof当参数变化时会在引用的地方同步变化,避免硬编码
    //nameof里面可以是:类名,方法名,参数名,属性名
    public void NewMethod(int account1)
    {
        if(account1 < 100)
        {
            throw new ArgumentException($"参数{nameof(account1)}值不能小于100");
        }
        else
        {
            //其他操作
        }
    }

}

七、Null操作符

class NullOperator
{
    string[] array = new string[]{"ad","dg",null,"fae",null};

    //旧方法:
    public void OldMethod(int account1)
    {
        foreach(string item in array)
        {
            var length = item == null ? 0:item.Length;//为null输出0,否则输出长度
        }
    }
    

    //新方法
    //nameof里面可以是:类名,方法名,参数名,属性名
    public void NewMethod(int account1)
    {
        foreach(string item in array)
        {
            var length = item?.Length;//如果为null直接输出null
        }

        foreach(string item in array)
        {
            var length = item?.Length ?? 0;//不为null输出长度,如果为null输出0
        }
    }

}

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值