C#基础语法一文通(二)

483 阅读4分钟
VS注释:CTRL+K CTRL+C;(不知道设计者怎么想的,笨死了)
VS取消注释:CTRL+K CTRL+U;(笨死)
VS代码整理:CTRL+A CTRL+K CTRL+F;(笨死)
PS:最终无法忍受换了VS code😂😂😂😂😂

1. if语句

            if (条件1)
            {
                执行1;
            }
            else if(条件2)
            {
                执行2;
            }else
            {
                其他执行;
            }
如果执行语句只有一句,还可以简写:
            if(条件1) 执行1(仅一句);
            else if(条件2)执行2(仅一句);
            else (条件3)其他执行;

2. switch语句

switch (op) {
                case "+":
                    op = "a+b";
                    break;
                case "-":
                    op = "a-b";
                    break;
                case "*":
                case "×":
                    op = "a*b";
                    break;
                default:
                    op = "";
                    break;
            }
switch变量可以是整形’字符串‘布尔’char‘枚举或可以为null的类型,不能是其他的
case 只能判断定值;
每个case 必须break,包括default;
多个case执行相同语句可以缩写;

3.while语句

while (true) {
                
                break;//continue;return;break加等跳转语句;

            };

4.for循环

            for (int i = 0; i < 10; i++) {
                执行语句;
            }

4.1 foreach遍历函数

foreach (int i in arr){

}

4.2 string的一些方法

            string str = "我叫安妮";
            Console.WriteLine(str.IndexOf("安"));
            str.StartsWith("我");//判断开头字符,返回布尔;
            string[] arr;
            arr = str.Split("叫");//以某个字符切割字符串返回字符串组;
            str = str.Insert(2, "小");//在第2个之前插入字符;
            Console.WriteLine(str);
            str = str.Replace("小", "大");//用新字符替换旧字符;
            Console.WriteLine(str);
            str = str.Remove(2, 1);//从第二个开始移除一个
            Console.WriteLine(str);
            str = str.Remove(2);//从第2个开始移除以后的
            Console.WriteLine(str);

5. 方法(函数)结构

私有 静态 返回值 方法名(形参){
逻辑语句;
return 返回值;//如果是void的返回,只能写return(可不写),不能return任何东西;
}
private static int getWeekByDay(int year, int month, int day)
        {
            DateTime dt = new DateTime(year, month, day);
            return (int)dt.DayOfWeek;
        }

6. 方法(函数)的重载

方法名相同,返回值相同,但参数不同的方法们会被视为不同的方法,调用时传入不同的参数就可以实现方法的重载
例子:
        private static long CountSec(int min) {
            return min * 60;
        }
        private static long CountSec(int hour,int min)
        {
            return hour*CountSec(60)+min * 60;
        }
        private static long CountSec(int day,int hour, int min)
        {
            return day* CountSec(24,0) + hour * CountSec(60) + min * 60;
        }

7.递归

递归优点:逻辑简单化
递归缺点:谨防堆栈溢出,性能差
例:递归算阶乘 :5*4*3*2*1
s3*2*1tatic void Main(string[] args)
        {
            Console.WriteLine (DiGui(5));
        }
private static int DiGui(int num) {
            if (num == 1) return 1;
            return num * DiGui(num - 1);
        }

8.数组

数组必须是同一种数据类型
数组的写法:
①声明、初始化、赋值
            int[] a;//声明数组
            a = new int[3];//初始化数组
            a[2] = 2;//数组赋值
②初始化加赋值
int[] arr = new int[5] { 1,2,3,4,5};
③ 声明+初始化+赋值
int[] arr = { 1,2,3,4,5};
④匿名数组
GetMax(new int[] {12,53,64,77,88 })

9. var 推断类型

根据所赋值数据推断出类型

10. 声明父类类型 赋值子类对象

例:声明父类,传参传任意子类都可以。
private static void fun1(Array arr) {
            执行语句;
        }

11.随机数

static Random random = new Random();//此句写在方法外,类里面。
random.Next(1, 34);//含头不含尾;

12.数组方法

①获取数组长度
数组名.Length
②清除元素
注意!!!清除不是删除,清除只是将值清除为默认值!!!!
Array.Clear(数组, 起始位置, 清除长度);
例:Array.Clear(arr, 2, 4);
③数组复制元素
(1)Array.Copy(源数组,源数组开始index,目标数组,目标数组开始index,复制长度);
            int[] arr = { 1, 4, 2, 6, 7, 9 };
            int[] arr2 = { 0, 0, 0, 0, 0, 0 };
            Array.Copy(arr,2,arr2,2,3);
(2)Array.Copy(源数组,目标数组,,复制长度);//从第一个开始赋复制
④数组复制 将源数组从目标数组index位置开始,拷贝进目标数组中去
源数组.CopyTo(目标数组,目标数组开始index);
arr.CopyTo(arr2,0);
⑤数组克隆
arr2=(int[])arr.Clone();//因为Clone返回的是Object类型;
⑥查找元素
Array.IndexOf (数组,元素) //返回元素index 如果没有此元素,返回-1;
Array.IndexOf (arr,6)
Array.LastIndexOf (arr,2)
⑦数组排序
Array.Sort (arr);//无返回值
⑧ 数组反转
Array.Reverse (arr);

13.二维数组

int[,] a=new int[5,3];
也可以:
int[,] arr={ {1,2,3}, {4,5,6} };
①二维数组也可以遍历
foreach(int each in arr){
 Console.WriteLine (each);
            }
② 获取数组行列数
Console.WriteLine(arr.GetLength(0));//行数
Console.WriteLine(arr.GetLength(1));//列数

14. 交错数组

            int[][] arr;
            arr=new int[4][];
            arr[0]=new int[]{1,2,3};
            arr[1]=new int[]{4,5};
            arr[2]=new int[]{6};
            arr[3]=new int[]{7,8,9,10};
            arr[4]=new int[]{11,12};
交错数组的每个元素是一个数组
②交错数组也可以用foreach遍历 //双重遍历;
            int[][] arr;
            arr=new int[4][];
            arr[0]=new int[]{1,2,3};
            arr[1]=new int[]{4,5};
            arr[2]=new int[]{6};
            arr[3]=new int[]{7,8,9,10};
            arr[0][0]=6;
            foreach(int[] eachArr in arr){
                foreach(int each in eachArr){
                    Console.Write(each+"\t");
                }
                Console.WriteLine();
            }
注意!!!交错数组的每个元素是一个数组 所以for循环应该
for (int i = 0; i < arr.Length; i++)
            {
                for (int j = 0; j < arr[i].Length; j++)
                {
                    Console.Write(arr[i][j] + "\t");
                }
                Console.WriteLine();
            }

15. 参数数组

当参数类型确定但数量不确定时,用数组比较合适 由此引出:参数数组
参数数组写法:
private static int Sum(params int[] arr){}
传参时可以:
sum();
Sum(new int[]{1,2,3});
Sum(1,2,3);
参数数组特点总结:
①对方法内部而言,参数数组只是一个普通数组;
②对外部而言,可以 1.传递数组 2.传递变量合计 3.不传参