当前位置 : 主页 > 编程语言 > c语言 >

c#语言特性8.0

来源:互联网 收集:自由互联 发布时间:2021-06-25
using DocumentFormat.OpenXml.Presentation; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Language{ class Class1 { // Readonly 成员 public struct Point { publi
using DocumentFormat.OpenXml.Presentation;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Language
{
    class Class1
    {
        //Readonly 成员
        public struct Point
        {
            public double X { get; set; }
            public double Y { get; set; }
            public double Distance => Math.Sqrt(X * X + Y * Y);

            public readonly override string ToString() =>
                $"({X}, {Y}) is {Distance} from the origin";
        }

        //元组模式

        public static string RockPaperScissors(string first, string second)
    => (first, second) switch
    {
        ("rock", "paper") => "rock is covered by paper. Paper wins.",
        ("rock", "scissors") => "rock breaks scissors. Rock wins.",
        ("paper", "rock") => "paper covers rock. Paper wins.",
        ("paper", "scissors") => "paper is cut by scissors. Scissors wins.",
        ("scissors", "rock") => "scissors is broken by rock. Rock wins.",
        ("scissors", "paper") => "scissors cuts paper. Scissors wins.",
        (_, _) => "tie"
    };


        /*
 这里有几个语法改进:
变量位于 switch 关键字之前。 不同的顺序使得在视觉上可以很轻松地区分 switch 表达式和 switch 语句。
将 case 和 : 元素替换为 =>。 它更简洁,更直观。
将 default 事例替换为 _ 弃元。
正文是表达式,不是语句。
 */
        public static RgbColor FromRainbow(Rainbow colorBand)
        {
            return colorBand switch
            {
                Rainbow.Red => new RgbColor(),
                Rainbow.Orange => new RgbColor(),
                Rainbow.Yellow => new RgbColor(),
                Rainbow.Green => new RgbColor(),
                Rainbow.Blue => new RgbColor(),
                Rainbow.Indigo => new RgbColor(),
                Rainbow.Violet => new RgbColor(),
                _ => throw new ArgumentException(message: "invalid enum value", paramName: nameof(colorBand)),


            };
        }

        //静态本地函数
        int M()
        {
            int y = 5;
            int x = 7;
            return Add(x, y);

            static int Add(int left, int right) => left + right;
        }

        public static void Run()
        {
            //索引和范围
            var words = new string[]
            {
                        // index from start    index from end
            "The",      // 0                   ^9
            "quick",    // 1                   ^8
            "brown",    // 2                   ^7
            "fox",      // 3                   ^6
            "jumped",   // 4                   ^5
            "over",     // 5                   ^4
            "the",      // 6                   ^3
            "lazy",     // 7                   ^2
            "dog"       // 8                   ^1
            };              // 9 (or words.Length) ^0

            //words[1..4]  "The",   "quick", "brown", "fox",  
            //words[4..]    "jumped"---->"dog"



            //stackalloc 运算符
            int length = 3;
            Span<int> numbers = stackalloc int[length];
            for (var i = 0; i < length; i++)
            {
                numbers[i] = i;
            }

            //指针类型
            unsafe
            {
                int* p = stackalloc int[10];
                for(int i=0;i<10;i++)
                {
                    p[i] = i;
                }

                for(int i=0;i<10;i++)
                {
                    Console.WriteLine(*p++);
                }
            }
        }

        public enum Rainbow
        {
            Red,
            Orange,
            Yellow,
            Green,
            Blue,
            Indigo,
            Violet
        }


    }
}
网友评论