1 using System;
2 using System.Collections.Generic;
3 using System.Text;
4 using static System.Console;
5
6 namespace ConsoleApp1
7 {
8 public class CSharp7
9 {
10 public static int b = 0b0001;
11 public static int b2 = 0b0001_00_00;
12 public static long salary = 1000_000_000;
13 public static decimal pi = 3.141_592_653_589m;
14
15
16 private int _age;
17 public int Age
18 {
19 get => _age;
20 ///C#语句随意使用throw语句
21 set => _age = value <= 0 || value >= 130 ? throw new ArgumentException("参数不合法") : value;
22 }
23
24 public string Name { get; set; } = "jefft";
25
26 /// <summary>
27 /// 解构方法
28 /// </summary>
29 /// <param name="name"></param>
30 /// <param name="age"></param>
31 public void Deconstruct(out string name, out int age)
32 {
33 name = Name;
34 age = Age;
35 }
36
37 public CSharp7()
38 {
39
40 }
41
42
43 //局部函数
44 public static void Outer()
45 {
46 WriteLine("局部方法:");
47 Inner(5);
48 Inner(10);
49 Inner(12);
50
51 void Inner(int len= 10)
52 {
53 for(var i = 0; i< len; i++)
54 {
55 Write($" {i},");
56 }
57
58 WriteLine();
59 }
60 }
61
62 ~CSharp7() => Console.WriteLine("Finalized!");
63
64
65 public static void Instance()
66 {
67 var item = new CSharp7();
68 item.Age = 30;
69 var (name, age) = item;
70 WriteLine($"解构结果:name:{name},age: {age}");
71 }
72
73 public static void TestNumberForamt()
74 {
75 WriteLine($"pi={pi}, salary={salary}, b={b}, b2={b2}");
76 }
77
78 public static void TestOutTypeVar()
79 {
80 WriteLine("输入一个数字:");
81 var input = ReadLine();
82 if (int.TryParse(input, out var result))
83 {
84 WriteLine("您输入的数字是:{0}", result);
85 }
86 else
87 {
88 WriteLine("无法解析输入...");
89 }
90 }
91
92 public static void TestTuple()
93 {
94 WriteLine("Tuple::");
95
96 ///默认
97 var tuple = (12, 23);
98 WriteLine($"{tuple.Item1},{tuple.Item2}");
99
100 ///左边=>解构
101 var (one, two) = (11, 22);
102 WriteLine($"{one},{two}");
103
104 ///右边
105 var tuple2= (one: 1, two: 2);
106 WriteLine($"{tuple2.one},{tuple2.two}");
107 }
108
109 public static void TestLoaclRef()
110 {
111 int[,] arr = { { 11, 15 }, { 22, 25 } };
112
113 ref var num = ref GetLocalRef(arr, c => c % 2 == 0);
114 Console.WriteLine($"原数值{arr[1, 0]}");
115 num = 600;
116 Console.WriteLine($"新数值{arr[1, 0]}");
117
118 }
119
120 static ref int GetLocalRef(int[,] arr, Func<int, bool> func)
121 {
122 for (int i = 0; i < arr.GetLength(0); i++)
123 {
124 for (int j = 0; j < arr.GetLength(1); j++)
125 {
126 if (func(arr[i, j]))
127 {
128 return ref arr[i, j];
129 }
130 }
131 }
132
133 throw new InvalidOperationException("Not found");
134 }
135
136
137 public static void TestCaseTypeVar(object item)
138 {
139 switch(item)
140 {
141 case int i when i< 10:
142 WriteLine($"int类型:{i},且数字小于10");
143 break;
144 case int i:
145 WriteLine($"int类型:{i},且数字大于等于10");
146 break;
147 case float f:
148 WriteLine($"浮点类型:{f}");
149 break;
150 case string str when int.TryParse(str, out int result):
151 WriteLine($"字符串类型转为Int类型:{result}");
152 break;
153 default:
154 break;
155 }
156 }
157
158 public static void TestIsTypeVar(object item)
159 {
160 if (item is int i && i < 10)
161 {
162 WriteLine($"int类型:{i},且数字小于10");
163 }
164 else if (item is int i2)
165 {
166 WriteLine($"int类型:{i2},且数字大于等于10");
167 }
168 else if (item is float f)
169 {
170 WriteLine($"浮点类型:{f}");
171 }
172 else if (item is string str && int.TryParse(str, out int result))
173 {
174 WriteLine($"字符串类型转为Int类型:{result}");
175 }
176 }
177 }
178 }