(C#) 精简 C# 入门(二)

最近在做一些需要用到 C# 开发的项目,许久未碰有些生疏,因此决定把语言的基础内容先都快速过一遍。为方便查阅,挑选最精简的部分整理于该博客。

【说明】

  1. 本系列的目标是整理出十个以内的博客(传送门),其中每个博客大概包含 10 个左右的非常简短的 Section,适合快速入门。目前更新到:精简 C# 入门(四)
  2. 本系列不适用于完全的编程初学者(未接触任何计算机语言),这一类读者建议仔细学习【参考资料】中的视频资源

【参考资料】
1.b站:【01_C#入门到精通】新手强烈推荐:C#开发课程,一整套课程

#1 异常处理 try-catch

近似于 Python 的 try-except

try
{
    
    
	// 可能出现异常的代码块
}
catch
{
    
    
	// 出现异常后需要执行的代码块
}

恰当地使用 try-catch,可以实现一些 if else 语句无法实现的效果,例如:

int n = 0;
Console.WriteLine("请输入一个数字");
try
{
    
    
	n = Convert.ToInt32(Console.ReadLine());
}
catch
{
    
    
	Console.WriteLine("请不要输入其他字符!");
}

#2 查看运行时间

对于两个不同的算法,可以通过比较其运行时间来判断优劣。示例:

using System.Diagnostics; // 需要现在开头引用一个命名空间

Stopwatch sw = new Stopwatch();
sw.Start();
// 算法
sw.Stop();
Console.WriteLine(sw.Elapsed);

#3 选择与循环:if & for

使用 Tab + Tab 快捷键,实现快速生成结构体格式,例如输入 for 直接按两下 Tab,效果:

for (int i = 0; i < length; i++)
{
    
    

}

其余的大部分结构体都适用于该快捷键

3.1 if else

if (判断条件 1)
{
    
    
	// 代码块
}
else if (判断条件 2)
{
    
    
	// 代码块
}
else
{
    
    
	// 代码块
}

3.2 switch case

switch (变量或表达式的值)
{
    
    
	case1: // 代码
		break;
	case2: // 代码
		break;
	default: // 代码
		break;
}

3.3 while

while (循环条件)
{
    
    
	// 代码块
}

使用 break 可以跳出当前循环
使用 continue 跳过本次循环,回到循环条件

3.4 do while

while 循环:先判断再执行
do while 循环:先执行再判断

do
{
    
    
	// 代码块
}while(循环条件)

3.5 for

for (int i = 0; i < length; i++)
{
    
    
	// 代码块
}

3.6 for each

foreach (var item in collection)
{
    
    
	// 代码块
}

var 的作用详见 精简 C# 入门(一)Section #5.2,可以替换为其他数据类型
collection 包含数组(int[]…)与集合(ArrayList, HashTable)

以上代码中的关于 数组 的介绍位于本博客的 Section #11,而关于 集合 这个概念则可以先忽略,其内容在 精简 C# 入门(四)Section #7, #8 中会有详细介绍

#4 断点与调试

先加个断点,然后按 F5 进行调试
F11 逐语句调试(单步调试)
F10 逐过程调试。相比于逐语句调试,逐过程调试不会跳入具体函数中去。例如下图中,F10 不会跳入函数 GetMax 中去,而 F11 会逐语句执行每一行代码。
在这里插入图片描述

#5 三元表达式

语法:

变量 = 表达式1 ? 表达式2 : 表达式3

表达式1 True 就执行 表达式2,False 则执行 表达式3,例如:

int max = n1 > n2 ? n1 : n2;

#6 产生随机数

这一块是在【参考资料】(1) 的 P61 中突然中途插入的内容,个人感觉其与上下文的关系有点割裂,因此仅做一个简短总结。

Random r = new Random();    // 创建能够生成随机数的对象
int rndInt = r.Next(1, 10); // 调用该对象的方法,产生一个 1-9 之间的随机数  

#7 常量

const 常量类型 常量名 = 常量值;
const double pi = 3.14;

相较于变量,常量不能被修改(重新赋值)

#8 枚举 enum

枚举类型是一种特殊的类,与类同级,因此直接写在命名空间内,定义:

public enum Gender
{
    
    
	man,
	woman
}

有了 Gender 这个类,在之后的 Main 函数中,我们就可以创建类对象,例如:

Gender gender = Gender.man;

更具体的使用方式如下图:
在这里插入图片描述
枚举类型与 int 类型兼容(可以相互转换),依旧使用刚刚定义好的的 Gender 类:

Gender gender = Gender.woman;
int n = (int)gender;

>>> 
"1"
int n = 0;
Gender gender = (Gender)n;

>>> 
"man"

更复杂的,枚举类型中的变量还可以进行赋值。赋值后,该变量转换成 int 时的数值等于该赋值。并且改变量之后的其他变量所对应的 int 数值也会发生改变,具体如下图:

枚举类型与 string 不兼容,因此相互转换要麻烦一些(尤其是 string 转枚举)。使用以上 Animal 类为例:

// 枚举转 string
string str = Animal.dog.ToString();

>>>
"dog"
// string 转枚举
string str = "dog";
Animal animal = (Animal)Enum.Parse(tyepof(Animal), str);

>>>
"dog"

#9 结构 struct

一次性声明多个不同类型的变量

public struct Person
{
    
    
	public string _name,
	public string _gender,
	public int _age,

	string _nickname
}

public 关键字使得其修饰的字段能由外部进行访问和修改,例如 _name 这个字段。未由 public 修饰的字段默认为 private,无法由外部进行修改,例如 _nickname。

注意:我们将结构中的“变量”称之为字段。与变量的唯一性不同,字段可以同时存在同名的多个,例如不同人可以有相同的 _name 字段。因此为了体现这一差别,一般习惯在字段前加上一个下划线

示例:enum in struct

public struct Person
{
    
    
	public string _name,
	public Gender _gender,
	public int _age,

	string _nickname
}

public enum Gender
{
    
    
	man,
	woman
}

class Program
{
    
    
    static void Main(string[] args)
    {
    
    
        Person p1;
        p1._name = "小红";
        p1._gender = Gender.woman;
        p1-_age = 99;
    }
}

#10 数组 list

一次性存储多个相同类型的变量

数组类型[] 数组名 = new 数组类型[(数组长度)] // ()意味着可以省略

数组的声明

示例(1):

int[] nums = new int[10]; // 声明一个数组,此时默认数组内 10 个元素均为 0
nums[0] = 1;              // 修改第 0 个元素为 1

示例(2):

int[] nums1 = {
    
    123}int[] nums2 = new int[3] {
    
    1, 2, 3};

数组的属性

nums.Length >>> 10 // 长度

不同于变量,外部函数可以直接对传入的数组进行修改,从而改变数组在该函数外部的值。例如以下代码中,Change 函数更改了 Main 函数中的数组 nums,但并未改变变量 n

static void Main(string[] args)
{
    
    
    int n = 0;
    int[] nums = {
    
     0 };
    Program.Change(n, nums);

    Console.WriteLine(n);
    Console.WriteLine(nums[0]);
    Console.ReadKey();
}

static void Change(int n, int[] nums)
{
    
    
    n += 1;
    nums[0] += 1; 
}

>>>
"0
1"

#11 冒泡排序

由于本博客默认读者并不是完全不会其他任何计算机语言的,因此冒泡排序的原理不在这里赘述。直接给出 C# 冒泡排序的实现方式(从小到大):

int[] nums = {
    
     3, 4, 7, 1, 6, 6, 8 };
for (int i = 0; i < nums.Length; i++)
{
    
    
    for (int j = 0; j < nums.Length-1-i; j++)
    {
    
    
        if (nums[j] > nums[j+1])
        {
    
    
            int temp = nums[j+1];
            nums[j+1] = nums[j];
            nums[j] = temp;
        }
    }
}
for (int i = 0; i < nums.Length; i++) {
    
     Console.Write(nums[i]); }
Console.ReadKey();

>>>
"1346678"

当然,C# 中有内置的方法能帮助我们快速实现数组的升序 or 降序排序:

Array.Sort(nums);    // 升序
Array.Reverse(nums); // 降序

猜你喜欢

转载自blog.csdn.net/weixin_43728138/article/details/115793759