.NET 常用类库
这是什么:.NET 常用类库——微软官方打包好的一整个"轮子仓库",读输入、算时间、生成随机数都有现成的。
为什么用:写程序不用万事从零造。自己手写读输入、算日期这些通用功能,又慢又容易出错;官方库早几十年就写好了,还一直在修 bug。
如何用:本章开箱 Console、Math、DateTime、Random 这几件最常用的,以后遇到需求先想想:官方是不是已经造好轮子了?
类库 = 官方轮子包
每个类都住在一个名字空间(namespace)里,就像快递盒上的地址:打印工具 Console 的全名其实是 System.Console。文件顶部写 using System;,意思是"把 System 这箱轮子搬进屋",之后只喊名字就能用。也可以把名字空间想成小区地址:System.Console 是"System 小区的 Console 家",using 就是把整个小区加进通讯录。
好消息:
dotnet new console新建的项目默认隐式 using,常用的箱子已经自动搬好了,直接用就行。
Console:和黑窗口对话
Console.Write("你叫什么:"); // 输出但不换行
string name = Console.ReadLine(); // 读一行用户输入
Console.WriteLine($"你好,{name}!"); // 输出并换行
你叫什么:青蛙
你好,青蛙!
注意:ReadLine 读进来的永远是字符串,想要数字得用 int.Parse 或 TryParse 转一下——综合练习会用到。
Math:数学轮子
Console.WriteLine(Math.Abs(-5));
Console.WriteLine(Math.Max(3, 7));
Console.WriteLine(Math.Sqrt(16));
Console.WriteLine(Math.PI);
5
7
4
3.141592653589793
DateTime:日期时间
DateTime now = DateTime.Now;
Console.WriteLine(now.ToString("yyyy-MM-dd HH:mm"));
Console.WriteLine(now.DayOfWeek);
2026-10-19 22:30
Monday
DateTime.Now 取的是电脑当前时间,所以你运行时输出会不一样——这才正常。
Random:随机数
var random = new Random();
int dice = random.Next(1, 7); // 1~6 的随机整数
Console.WriteLine($"掷出了 {dice} 点");
Next(1, 7) 是 1 到 6——Next 一直"含头不含尾",下一章猜数字还要靠它。
List<T> 与 Dictionary:会变长的容器
数组定长,List 随加随长;Dictionary 是"拿钥匙找值"的查询表:
var fruits = new List<string> { "苹果", "香蕉" };
fruits.Add("橘子"); // 追加一个
Console.WriteLine(fruits.Count); // 现有几个
var ages = new Dictionary<string, int>();
ages["小青蛙"] = 3; // 存:钥匙 → 值
Console.WriteLine(ages["小青蛙"]); // 取:按钥匙拿值
3
3
取值和数组一样用下标:fruits[0] 是"苹果";删除用 fruits.Remove("香蕉")。两个都是"装东西的容器",比数组灵活得多。
| 类 | 一句话 | 常用招式 |
|---|---|---|
List<T> |
会变长的数组 | Add、Count、foreach |
Dictionary<K,V> |
钥匙 → 值 查询表 | dict[key] 存和取 |
❓ 常见问题
Q1:List<T> 和数组有什么区别?
数组长度固定,创建时就定死了;List<T> 会动态增长,用 Add 随便加。需要固定长度用数组,否则首选 List<T>。
Q2:Dictionary 键不存在时直接取会怎样?
ages["不存在"] 会抛出 KeyNotFoundException。先用 ages.ContainsKey("不存在") 判断,或用 ages.TryGetValue("不存在", out int v) 安全取值。
Q3:Random 实例要不要反复 new?
不要在循环里反复 new Random()——实例化太快会用到同一时钟种子,产生相同随机数。应该在类级别或方法外 new 一次,复用同一个实例。
⚠️ 新手翻车现场
翻车一:Dictionary 取不存在的键
var ages = new Dictionary<string, int>();
Console.WriteLine(ages["小黑"]); // ❌ KeyNotFoundException
问题:键不存在时直接用下标取值会抛异常。
修正:if (ages.ContainsKey("小黑")) Console.WriteLine(ages["小黑"]); 或 ages.TryGetValue("小黑", out int v)。
翻车二:List 遍历时删除元素
foreach (var f in fruits)
{
if (f == "香蕉") fruits.Remove(f); // ❌ 运行时报错
}
问题:C# 不允许在 foreach 遍历时修改集合。
修正:用 for 倒序遍历,或先收集要删除的项再统一删除。
翻车三:Random 循环里 new 出相同数字
for (int i = 0; i < 10; i++)
{
var r = new Random();
Console.WriteLine(r.Next(1, 7)); // 可能连续输出相同数字
}
问题:new Random() 默认用时间做种子,循环太快种子相同,随机数重复。
修正:在循环外 var random = new Random();,循环内只调 random.Next()。
🎯 什么时候用哪个类
| 场景 | 推荐 | 原因 |
|---|---|---|
| 和黑窗口交互 | Console |
WriteLine 输出,ReadLine 输入 |
| 做数学运算 | Math |
Abs、Max、Sqrt、PI 等 |
| 处理日期时间 | DateTime |
Now、ToString 格式化 |
| 产生随机数 | Random |
Next 得到随机整数 |
| 会变长的同类型集合 | List<T> |
Add、Count、可 foreach |
| 按键查值 | Dictionary<K,V> |
dict[key] 存取,查询快 |
📝 本章小结
- .NET 类库是"官方轮子包",按名字空间组织,
using搬进来就能用 Console做控制台输入输出,ReadLine读来永远是字符串Math、DateTime、Random分别处理数学、日期、随机数List<T>是可变长数组,Dictionary<K,V>是键值对查询表Dictionary取不存在的键会崩,先ContainsKey或用TryGetValue- 记忆口诀:类库是官方轮子包,using 搬箱;Next 含头不含尾,List 会变长,字典拿钥匙。
动手改
- 用
Console.ReadLine问用户最爱吃的东西,再用插值输出一句评价 - 掷骰子 1000 次(for 循环 + Random),数一数 6 点出现了多少次
- 建一个 Dictionary 装三个同学的年龄,用 foreach 打印"姓名:年龄"
- 用
DateTime.Now打印当前时间,格式为yyyy-MM-dd HH:mm:ss
下一章:综合练习,把学到的全部用上 🐸