C#7.0语法糖,VS2017可用

C#7.0语法糖,VS2017可用

    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                //ref变量
                //TestRef();

                //ref方法
                //TestRefFunction();

                //valueTuple
                //TestValueTuple();

                //类型转换
                //TestTypeConvert(20);

                //内部方法
                //TestLocalFunction();

                //一行代码的方法
                //TestFunctionForSingleLineCode();

                //数字可视化
                //TestNumber();

                //异常处理
                //TestException();

                //null处理
                TestNull();
            }
            catch (Exception e)
            {
                Console.WriteLine("Error:" + e.Message);
            }
        }

        private static void TestRef()
        {
            //定义值类型
            decimal money = Convert.ToDecimal(88.88);
            //把值类型赋值给另一个值类型
            ref decimal newMoney = ref money;
            //打印
            Console.WriteLine($"money【{money}】,newMoney【{newMoney}】");
            //修改原始的值类型,按道理来说值类型之间修改不会影响后来的,但是使用了ref,后赋值的变量也会跟着修改
            money = Convert.ToDecimal(99.99);
            //打印
            Console.WriteLine($"money【{money}】,newMoney【{newMoney}】");
        }

        private static void TestValueTuple()
        {
            //获取用户信息
            (string userName, int age, decimal money) user = GetUserInfo();
            //打印
            Console.WriteLine($"user:姓名【{user.userName}】,年龄【{user.age}】,余额【{user.money}】");
            //获取用户信息
            var user1 = GetUserInfo();
            //打印
            Console.WriteLine($"user1:姓名【{user1.userName}】,年龄【{user1.age}】,余额【{user1.money}】");

            //定义元祖
            (string title, string field, bool isRequired) columnItem = ("姓名", "UserName", true);
            //打印
            Console.WriteLine($"标题【{columnItem.title}】,字段名【{columnItem.field}】,是否必填【{columnItem.isRequired}】");
            //再额外定义同名变量不会影响到原来的变量名
            string title = "张三";
        }

        private static (string userName, int age, decimal money) GetUserInfo()
        {
            //使用元祖返回用户信息
            return ("Ling、bug", 25, Convert.ToDecimal(66.66));
        }

        private static void TestTypeConvert(object obj)
        {
            //判断类型
            if (obj is int)
            {
                //类型转换
                int objInt1 = Convert.ToInt32(obj);
                //打印
                Console.WriteLine(objInt1);
            }

            //判断类型,如果是则直接转换
            if (obj is int objInt2)
            {
                //打印
                Console.WriteLine(objInt2);
            }
        }

        private static void TestRefFunction()
        {
            //定义数组
            var arr = new int[] { 1, 2, 3, 4, 5, 6 };
            //打印
            Console.WriteLine(string.Join(",", arr));
            //获取值(调用ref方法,返回值和调用出都需要使用ref标识)
            ref var num = ref GetArrayValueByIndex(arr, 2);
            //修改获取到的值,原则上修改值类型,不会影响到原始值,但是由于使用了ref标识,则数组内该值会同步修改
            num = 99;
            //打印
            Console.WriteLine(string.Join(",", arr));
        }

        private static ref T GetArrayValueByIndex<T>(T[] arr, int index)
        {
            //返回数组指定索引的值,但是这里使用ref标识之后,如果值被修改,数组会同步修改
            return ref arr[index];
        }

        private static void TestLocalFunction()
        {
            //定义内部方法(不需要静态标识,不需要作用域标识)
            (string name, int age) GetUserInfoByUserName(string name)
            {
                return (name + "Test", 26);
            }

            //调用局部方法
            var user = GetUserInfoByUserName("Ling、bug");
            //打印
            Console.WriteLine($"姓名【{user.name}】,年龄【{user.age}】");
        }

        private static void TestFunctionForSingleLineCode()
        {
            //定义局部方法,因为只有一行代码,所以可以简写
            int Sum(int x, int y) => x + y;

            foreach (var a in Enumerable.Range(1, 10))
            {
                foreach (var b in Enumerable.Range(10, 15))
                {
                    //打印求和结果
                    Console.WriteLine($"{a} + {b} = {Sum(a, b)}");
                }
            }
        }

        private static void TestNumber()
        {
            //数字为了可读性强,可以使用下划线(_)来分割,不影响实际值

            //定义整数
            int num1 = 123_456_78;
            int num2 = 12345678;
            //判断是否相等
            Console.WriteLine(num1 == num2);

            //定义小数
            double money1 = 33.33_333;
            double money2 = 33.33333;
            //判断是否相等
            Console.WriteLine(money1 == money2);
        }

        private static void TestException()
        {
            //是否是自定义异常
            bool IsCustomException(Exception exception) => exception is LingbugException;

            try
            {
                //自定义异常
                throw new LingbugException("Ling、bug");
                //异常
                int a = Convert.ToInt32("Ling、bug");
            }
            catch (Exception ex) when (IsCustomException(ex))//try catch when判断为true之后才会执行后面的代码
            {
                //自定义异常
                Console.WriteLine("自定义异常:" + ex.Message);
            }
            catch (Exception ex)
            {
                //非自定义异常
                Console.WriteLine("不是自定义异常:" + ex.Message);
            }
        }

        private static void TestNull()
        {
            //获取展示名称
            string GetNameShow(string name) => name ?? "null";

            //初始化学生
            var student = new Student()
            {
                Name = "张三",
                ClassInfo = new ClassModel()
                {
                    ClassName = "一班",
                    Teacher = new Teacher()
                    {
                        TeacherName = "李老师"
                    }
                }
            };

            //如果student不为null,则使用student.Name
            string studentName = student?.Name;
            //班级名称
            string className = student?.ClassInfo?.ClassName;
            //老师名称
            string teacherName = student?.ClassInfo?.Teacher?.TeacherName;

            //打印
            Console.WriteLine($"学生姓名【{GetNameShow(studentName)}】,班级【{GetNameShow(className)}】,老师姓名【{GetNameShow(teacherName)}】");
        }
    }

 

Ending~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值