C#新语法

发布时间 2023-09-18 13:30:59作者: 它的眼角开过光
C#6语法
1.只读自动属性
2.using static
3.Null 条件运算符
3.字符串内插
4.异常筛选器
5.nameof 表达式
6.使用索引器初始化关联集合
 
 
C#7语法
1.out 变量
原:先声明,后使用
现:不需要声明
int.TryParse("456",out var result);
Console.WriteLine(result);

2.元组
   class Program
    {
        static void Main(string[] args)
        {
            //int.TryParse("456", out var result);
            //Console.WriteLine(result);

            //元组
            (string Alpha, string Beta) namedLetters = ( "a", "b" );
            namedLetters.Alpha = "aa";
            namedLetters.Beta = "bb";
            Console.WriteLine($"{namedLetters.Alpha},{namedLetters.Beta}");

            var alphabetStart = (Alpha: "a", Beta: "b");
            alphabetStart.Beta = "B+B";
            alphabetStart.Alpha = "A+A";
            Console.WriteLine($"{alphabetStart.Alpha},{alphabetStart.Beta}");

            (int max, int min) = Range();
            Console.WriteLine(max);
            Console.WriteLine(min);

            {
                var p = new Point(12, 13);
                Console.WriteLine(p.X);
                Console.WriteLine(p.Y);
                p.Deconstruct(out double xx, out double yy);
                Console.WriteLine(xx);
                Console.WriteLine(yy);
            }

        }
        private static (int max,int min)Range()
        {
            return (123, 234);
        }
    }
    public class Point 
    {
        public Point(double x, double y) => (X, Y) = (x, y);

        public double X { get; }
        public double Y { get; }

        public void Deconstruct(out double x, out double y) => (x, y) = (X, Y);
    }

 

3.弃元
用不到的参数不进行返回值
4.模式匹配
    class Program
    {
        static void Main(string[] args)
        {
            //int.TryParse("456", out var result);
            //Console.WriteLine(result);
            #region 元组
            //元组
            //(string Alpha, string Beta) namedLetters = ("a", "b");
            //namedLetters.Alpha = "aa";
            //namedLetters.Beta = "bb";
            //Console.WriteLine($"{namedLetters.Alpha},{namedLetters.Beta}");

            //var alphabetStart = (Alpha: "a", Beta: "b");
            //alphabetStart.Beta = "B+B";
            //alphabetStart.Alpha = "A+A";
            //Console.WriteLine($"{alphabetStart.Alpha},{alphabetStart.Beta}");

            //(int max, int min) = Range();
            //Console.WriteLine(max);
            //Console.WriteLine(min);

            //{
            //    var p = new Point(12, 13);
            //    Console.WriteLine(p.X);
            //    Console.WriteLine(p.Y);
            //    p.Deconstruct(out double xx, out double yy);
            //    Console.WriteLine(xx);
            //    Console.WriteLine(yy);
            //}
            #endregion

            #region 模式
            {
                int input = 123;
                int sum = 234;
                if(input is int count)//input 是int类型变量,则将input值赋值给count
                {
                    sum += count;
                }
            }
            {
                IEnumerable<object> enumerablelist = new List<object>()
                {
                    0,
                    new List<int>(){0,1,2,3,4,5,6},
                    100,
                    null
                };
                int iResult = SumPositiveNumbers(enumerablelist);
            }
            #endregion

        }
        public static int SumPositiveNumbers(IEnumerable<object> sequence)
        {
            int sum = 0;
            foreach(var i in sequence)
            {
                switch(i)
                {
                    case 0:
                        break;
                    case IEnumerable<int> childSequence:
                        {
                            foreach (var item in childSequence)
                                sum += (item > 0) ? item : 0;
                            break;
                        }
                    case int n when n > 0:
                        sum += n;
                        break;
                    case null:
                        throw new NullReferenceException("NUll found in sequence");
                    default:
                        throw new InvalidOperationException("Unrecognizes type");
                }
            }
            return sum;
        }

 


5.ref 局部变量和返回结果
6.本地函数
7.更多的 expression-bodied 成员
8.throw 表达式
9.通用的异步返回类型
10.数字文本语法改进

C#8语法
1.Readonly 成员 待处理
2.默认接口方法
3.模式匹配增强功能:
4.Using 声明
5.静态本地函数
6.可处置的 ref 结构
7.可为空引用类型
8.异步流
9.异步可释放
10.索引和范围
11.Null 合并赋值
12.非托管构造类型
13.嵌套表达式中的
14.Stackalloc
15.内插逐字字符串的增强功能

C#9语法
1.记录
2.仅限 Init 的资源库
3.顶级语句
4.模式匹配增强功能
5.本机大小的整数
6.函数指针
7.禁止发出 localsinit 标志