🐸 青蛙编程网
首页 / C# / C# 基础 / 7. .NET 常用类库

.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 会变长,字典拿钥匙。

动手改

  1. 用 Console.ReadLine 问用户最爱吃的东西,再用插值输出一句评价
  2. 掷骰子 1000 次(for 循环 + Random),数一数 6 点出现了多少次
  3. 建一个 Dictionary 装三个同学的年龄,用 foreach 打印"姓名:年龄"
  4. 用 DateTime.Now 打印当前时间,格式为 yyyy-MM-dd HH:mm:ss

下一章:综合练习,把学到的全部用上 🐸

📥 下载本章代码

ZIP 内含本章全部代码文件与说明,解压即用,与教程内容同步生成。