关于C#7 新语法糖

C#7新语法糖

1.Switch 使用  goto 使用  

var kk = 1;
switch (kk)
{
  case 1:
    Console.WriteLine(1);
    goto case 4;
  case 2:
    Console.WriteLine(2);
    goto case 3;
  case 3:
    Console.WriteLine(3);
    goto default;
  case 4:
    Console.WriteLine(4);
    goto default;
  default:
    Console.WriteLine("default");
    break;
}

/**switch 用法, 在循环中可 分别多种类型 而且可以 进行类型,内容初步判断**/
List<object> objList = new List<object> { "1", 1, 1.22F };
var sum = 0d;
foreach (var item in objList)
{
  switch (item)
  {
    case string str when int.TryParse(str, out int result):
      sum += result;
      break;
    case int number:
      sum += number;
      break;
    case float number when number > 1:
      sum += number;
      break;
    default:
      break;
  }
}

Console.WriteLine(sum);

2.Object?.属性  新语法糖, 可以排除 对象为Null 的情况 , 不能排除属性为null 的情况

TmpClass1 obj1 = null;  //对象为null
var int16 = obj1?.tmpAtt ?? 0;// ??0 是判断 如果属性为空,则给默认值
var str = obj1?.tmpAtt1 ?? "0";// ??0 是判断 如果属性为空,则给默认值
Console.WriteLine(int16);
Console.WriteLine(str);
int16 = 16;
Console.WriteLine($"平均成绩:{(int16 > 80 ? int16 : 0):F2}");

3.Tuple 元组使用   与   解元组

Tuple<int, int> tuple = new Tuple<int, int>(1, 2);
Console.WriteLine($"第一个元素item1:{tuple.Item1}   第二个元素item2:{tuple.Item2}");
(string Message, int Code) tuple7 = ("请求失败", 500);
Console.WriteLine($"第一个元素Message:{tuple7.Message}   第二个元素Code:{tuple7.Code}");
var tuple7t = (Message: "请求成功!", Code: 200);
Console.WriteLine($"第一个元素Message:{tuple7t.Message}  第二个元素Code:{tuple7t.Code}");

/**解析方法**/
var (Message, Code) = tuple7;
Console.WriteLine($"解析元组  第一个元素Message:{Message}  第二个元素Code:{Code}");
var (Item1, Item2) = tuple;
Console.WriteLine($"解析元组  第一个元素Item1:{Item1}  第二个元素Item2:{Item2}");

TmpClass1 obj1 = new TmpClass1(10, "牛牛");
var (age, name) = obj1;
Console.WriteLine($"解析元组  第一个元素age:{age}  第二个元素name:{name}");

4.枚举 使用

EnumType enumObj = EnumType.类型1;
Console.WriteLine(EnumType.类型1);
Console.WriteLine((int)Enum.Parse(typeof(EnumType), "类型1", true));

5.重写 重载  区别

class Program
{
        Main方法
        static void Main(string[] args)
        {
            /**
             * 重载 同类/子类中 override  同名不同参
             * 重写 同类/子类中 new  同名同参
             * 利用反射  可反射出父类子实现对象中子类中的  属性,方法
             * **/

            @Class1 obj = new @Class1();
            obj.overrideFunc("@Class1");
            obj.overrideFunc("1", "2");
            Console.WriteLine(obj.message);


            @Class2 obj1 = new @Class2();
            obj1.overrideFunc("@Class2");
            obj1.overrideFunc("1", "2");
            obj1.overrideFunc("1", "2", "3");
            Console.WriteLine(obj1.message1);


            @Class1 obj2 = new @Class2();
            obj2.overrideFunc("@Class1:@Class2");
            obj2.overrideFunc("1", "2");
            Console.WriteLine(obj2.message);
            Console.WriteLine(JsonConvert.SerializeObject(obj2));


            Type typeObj = obj2.GetType();
            PropertyInfo proObj = typeObj.GetProperty("message1");
            Console.WriteLine(proObj.GetValue(obj2));
        }
}

public class @Class1
{
    public string message { get; set; } = "@Class1";
    public void overrideFunc(string message)
    {
        Console.WriteLine(message);
    }

    public void overrideFunc(string message, string message2)
    {
        Console.WriteLine($"{message},{message2}我是被@Class1重载的");
    }
}

public class @Class2 : @Class1
{
    public string message1 { get; set; } = "@Class2";

    public new void overrideFunc(string message)
    {
        Console.WriteLine($"{message}我被重写过");
    }
    public void overrideFunc(string message, string message1, string message2)
    {
        Console.WriteLine($"{message},{message2},{message2}我是被@Class2重载的");

    }

}

6.参数 params 使用

class Program
{
        Main方法
        static void Main(string[] args)
        {
            AnyWrite("text", 1, "abvc");
        }
        
        static void AnyWrite(params object[] data)
        {
            foreach (var item in data)
            {
                Console.WriteLine(item);
            }
        }
}

7.日期说法  时区不同所取到的值也不同

DateTime newDate = DateTime.Now;
Console.WriteLine(newDate.ToString());
Console.WriteLine(newDate.ToString(CultureInfo.InstalledUICulture));
Console.WriteLine(newDate.ToString("00", CultureInfo.InvariantCulture));

 

上一篇:ECMAScript语句之with 语句


下一篇:新生代概念理解