E_T

导航

c# 8 特性

Posted on 2020-03-05 14:44  E_T  阅读(332)  评论(0编辑  收藏  举报

属性匹配模式

    public class Teacher
    {
        public string Name { get; set; }
        public string Subject { get; set; }
        public void Deconstruct(out string name,out string subject)
        {
            name = Name;
            subject = Subject;
        }
    }


    public class Student
    {
        public Student(string name,int grade,Teacher teacher)
        {
            Name = name;
            Grade = grade;
            Teacher = teacher;
        }
        public string Name { get; set; }
        public int Grade { get; set; }
        public Teacher Teacher { get; set; }
        public void Deconstruct(out string name, out int grade, out Teacher teacher)
        {
            name = Name;
            grade = Grade;
            teacher = Teacher;
        }


        public bool Is5GradeStudent(Student student)
        {
            return student is Student(_, 5, Teacher(_, "物理"));
        }
    }


        static void Main(string[] args)
        {
            Student stu = new Student("adsfsa", 5, new Teacher()
            {
                Name = "张超",
                Subject = "物理"
            });

            bool sss= stu.Is5GradeStudent(stu);
            Console.WriteLine(sss.ToString());
        }

还可以这么写

        public bool Is5GradeStudent(Student student)
        {
            return student is { Grade: 5, Teacher: { Subject: "物理" } };
        }
        public bool Is5GradeStudent(object obj)
        {
            return obj is Student s && s is { Grade: 5, Teacher: { Subject: "物理" } };
        }

Switch 

    public class Circle
    {
        public Circle(int redius) => Redius = redius;
        public int Redius { get; set; }
    }
    public class Rectangle
    {
        public Rectangle(int length, int width) => (Length, Width) = (length, width);
        public int Length { get; set; }
        public int Width { get; set; }
    }
    public class Triangle
    {
        public int SideA { get; set; }
        public int SideB { get; set; }
        public int SideC { get; set; }
    }

        public static string ShapeInfo(object shape)
        {
            string info = shape switch
            {
                Rectangle r => r switch
                {                    
                    _ when r.Length==r.Width =>"正方形",
                    _ => $"矩形,长={r.Length},宽={r.Width}",
                },
                Circle { Redius: 1 } => "小圆形",
                Circle c => $"圆形,半径={c.Redius}",
                Triangle t => $"三角形,A={t.SideA},B={t.SideB},C={t.SideC}",
                _ => "未知"
            };
            return info;
        }

 

    public enum Color
    {
        UnKnown,
        Red,
        Green,
        Blue,
        Purple,
        Orange,
        Brown,
        Yellow
    }

        public static Color MixColor(Color c1,Color c2)
        {
            return (c1, c2) switch
            {
                (Color.Blue, Color.Red) => Color.Purple,
                (Color.Red, Color.Blue) => Color.Purple,
                (_, _) when c1 == c2=> c1,
                _ => Color.UnKnown,
            };
        }