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));