# CSharp 复习题库(分层练习) > 使用方式:每题都在“你的作答”填写答案;“批改区”由我批改后填写。 --- ## 入门(16题) ### 入门-1 [选择] C# 源文件常见扩展名是:A. `.cs` B. `.csharp` C. `.dotnet` D. `.clr` **你的作答** A **批改区** - 结果:✅ 正确 - 参考答案:A ### 入门-2 [选择] `Main` 方法作为入口,正确签名之一是:A. `void main()` B. `static void Main(string[] args)` C. `public Main()` D. `int Main(void)` **你的作答** B **批改区** - 结果:✅ 正确 - 参考答案:B ### 入门-3 [选择] 下列哪个是值类型:A. `string` B. `object` C. `int` D. `Array` **你的作答** C **批改区** - 结果:✅ 正确 - 参考答案:C ### 入门-4 [选择] `var x = 10;` 中 `x` 的编译期类型是:A. `dynamic` B. `object` C. `int` D. `long` **你的作答** C **批改区** - 结果:✅ 正确 - 参考答案:C ### 入门-5 [选择] 输出到控制台应使用:A. `Console.ReadLine` B. `Console.WriteLine` C. `Console.Open` D. `Console.Print` **你的作答** B **批改区** - 结果:✅ 正确 - 参考答案:B ### 入门-6 [填空] 用于单行注释的符号是 `____` **你的作答** `//` **批改区** - 结果:✅ 正确 - 参考答案:`//` ### 入门-7 [填空] `if` 条件表达式的结果类型必须是 `____` **你的作答** `bool` **批改区** - 结果:✅ 正确 - 参考答案:`bool` ### 入门-8 [填空] 将字符串 `"123"` 转 `int`,可用 `int.Parse("123")` 或 `____("123", out n)` **你的作答** `Convert.Int32("123", out n)` **批改区** - 结果:❌ 错误 - 参考答案:`int.TryParse("123", out n)` - 说明:`Convert.ToInt32` 没有 `out` 参数;带 `out` 的是 `TryParse`。 ### 入门-9 [判断] `const` 字段的值可以在运行时修改。对/错 **你的作答** 错 **批改区** - 结果:✅ 正确 - 参考答案:错 ### 入门-10 [判断] `string` 在 C# 中是引用类型。对/错 **你的作答** 对 **批改区** - 结果:✅ 正确 - 参考答案:对 ### 入门-11 [代码结果] 写出输出: ```csharp int a = 5; int b = 2; Console.WriteLine(a / b); Console.WriteLine(a / 2.0); ``` **你的作答** `2` `1.0` **批改区** - 结果:❌ 错误 - 参考答案: ```text 2 2.5 ``` - 说明:`a / b` 是整数除法,结果为 `2`。 ### 入门-12 [代码改错] 修复下面代码使其可编译: ```csharp Console.Writeline("Hello") ``` **你的作答** ```csharp Console.Writeline("Hello"); ``` **批改区** - 结果:❌ 错误 - 参考答案: ```csharp Console.WriteLine("Hello"); ``` - 说明:`WriteLine` 中 `L` 需要大写。 ### 入门-13 [简答] `==` 与 `Equals` 的常见区别是什么(1-2句话) **你的作答** `Equals` 可以用于更复杂判断,`==` 只比较值。 **批改区** - 结果:⚠️ 部分正确 - 参考要点: - `==` 是运算符,可被重载;不同类型语义可能不同。 - `Equals` 是方法(实例/静态),常用于值相等判断。 - 对 `string` 来说,`==` 比较的是内容(被重载),不是引用地址。 ### 入门-14 [编程] 从控制台读取姓名和年龄,输出:`你好,张三,你明年 19 岁。` **你的作答** ```csharp string name = Console.Readline(); int age = int.Parse(Console.Readline()); Console.WriteLine($"你好,{name},你明年 {age} 岁。"); ``` **批改区** - 结果:❌ 错误 - 参考答案: ```csharp string name = Console.ReadLine(); int age = int.Parse(Console.ReadLine()!); Console.WriteLine($"你好,{name},你明年 {age + 1} 岁。"); ``` - 说明:`ReadLine` 大小写错误,且“明年”应输出 `age + 1`。 ### 入门-15 [编程] 输入一个整数,判断奇偶并输出 `odd/even` **你的作答** ```Csharp int value = int.Parse(Console.ReadLine()); if( value%2 != 0 ) { Console.WriteLine("odd"); } else { Console.WriteLine("even"); } ``` **批改区** - 结果:❌ 错误 - 主要问题:`int.TryParse(...)` 返回 `bool`,不能直接赋给 `int` - 参考答案: ```csharp if (int.TryParse(Console.ReadLine(), out int value)) Console.WriteLine(value % 2 == 0 ? "even" : "odd"); ``` ### 入门-16 [编程] 输入三个整数,输出最大值 **你的作答** ```Csharp int[] value; int maxValue = 0; value[0] = int.Parse(Console.ReadLine()); value[1] = int.Parse(Console.ReadLine()); value[2] = int.Parse(Console.ReadLine()); for(int i = 0;i<2;i++) { if(value[i]>=value[i+1]) { maxValue = value[i]; } } Console.WriteLine(maxValue); ``` **批改区** - 结果:❌ 错误 - 主要问题:数组未初始化 - 参考答案: ```csharp int a = int.Parse(Console.ReadLine()!); int b = int.Parse(Console.ReadLine()!); int c = int.Parse(Console.ReadLine()!); int maxValue = Math.Max(a, Math.Max(b, c)); Console.WriteLine(maxValue); ``` --- ## 基础(18题) ### 基础-1 [选择] `for` 循环最适合:A. 已知次数迭代 B. 无限循环 C. 异常处理 D. 命名空间管理 **你的作答** A **批改区** - 结果:✅ 正确 - 参考答案:A ### 基础-2 [选择] `break` 在循环中的作用是:A. 跳过本次 B. 结束当前循环 C. 结束程序 D. 重启循环 **你的作答** B **批改区** - 结果:✅ 正确 - 参考答案:B ### 基础-3 [选择] `continue` 的作用是:A. 结束方法 B. 退出程序 C. 跳过本次迭代 D. 抛出异常 **你的作答** C **批改区** - 结果:✅ 正确 - 参考答案:C ### 基础-4 [选择] 数组声明正确的是:A. `int arr = new int[3]` B. `int[] arr = new int[3]` C. `array arr` D. `int arr[] = 3` **你的作答** B **批改区** - 结果:✅ 正确 - 参考答案:B ### 基础-5 [选择] `List` 位于命名空间:A. `System.Text` B. `System.Collections.Generic` C. `System.Linq.Expressions` D. `System.IO` **你的作答** B **批改区** - 结果:✅ 正确 - 参考答案:B ### 基础-6 [填空] 定义一个可空整型变量:`int____ x = null;` **你的作答** ? **批改区** - 结果:✅ 正确 - 参考答案:`?` ### 基础-7 [填空] 声明并初始化字典:`Dictionary d = new ____();` **你的作答** `Dictionary **批改区** - 结果:✅ 正确 - 参考答案:`Dictionary` - 说明:你填的类型名是对的,只是 Markdown 里的反引号没闭合。 ### 基础-8 [填空] 捕获异常的关键字是 `____` **你的作答** try和catch **批改区** - 结果:⚠️ 部分正确 - 参考答案:`catch` - 说明:`try` 用来包裹可能抛异常的代码,真正负责捕获异常的是 `catch`。 ### 基础-9 [填空] 释放非托管资源常用模式:实现 `____` 接口 **你的作答** (待填写) **批改区** (待批改) ### 基础-10 [代码结果] 写出输出: ```csharp for (int i = 0; i < 5; i++) { if (i == 2) continue; if (i == 4) break; Console.Write(i); } ``` **你的作答** (待填写) **批改区** (待批改) ### 基础-11 [代码结果] 写出输出: ```csharp string s = null; Console.WriteLine(s?.Length ?? -1); ``` **你的作答** (待填写) **批改区** (待批改) ### 基础-12 [改错] 找出并修复问题: ```csharp int[] nums = {1,2,3}; Console.WriteLine(nums[3]); ``` **你的作答** (待填写) **批改区** (待批改) ### 基础-13 [简答] `throw;` 和 `throw ex;` 的差异是什么 **你的作答** (待填写) **批改区** (待批改) ### 基础-14 [编程] 用 `while` 计算 `1..n` 的和(n 从输入读取) **你的作答** (待填写) **批改区** (待批改) ### 基础-15 [编程] 统计一个字符串中元音字母个数(忽略大小写) **你的作答** (待填写) **批改区** (待批改) ### 基础-16 [编程] 手写一个方法 `bool IsPrime(int n)` **你的作答** (待填写) **批改区** (待批改) ### 基础-17 [编程] 使用 `List` 去重并升序输出 **你的作答** (待填写) **批改区** (待批改) ### 基础-18 [编程] 使用 `Dictionary` 统计一句话中每个单词出现次数 **你的作答** (待填写) **批改区** (待批改) --- ## 核心(18题) ### 核心-1 [选择] 面向对象三大特性不包括:A. 封装 B. 继承 C. 多态 D. 事务 **你的作答** (待填写) **批改区** (待批改) ### 核心-2 [选择] `virtual` + `override` 用于:A. 字段隐藏 B. 运行时多态 C. 命名空间引用 D. 泛型约束 **你的作答** (待填写) **批改区** (待批改) ### 核心-3 [选择] `abstract` 类:A. 可直接实例化 B. 不能包含实现 C. 不能被继承 D. 不能直接实例化 **你的作答** (待填写) **批改区** (待批改) ### 核心-4 [选择] `interface` 成员默认:A. private B. protected C. public 合同 D. internal **你的作答** (待填写) **批改区** (待批改) ### 核心-5 [选择] 泛型约束 `where T : class` 的含义是:A. 值类型 B. 引用类型 C. 必须有无参构造 D. 必须实现 IDisposable **你的作答** (待填写) **批改区** (待批改) ### 核心-6 [填空] 声明一个自动属性:`public int Age { ____; ____; }` **你的作答** (待填写) **批改区** (待批改) ### 核心-7 [填空] 只读自动属性常见写法:`public string Id { get; ____; }` **你的作答** (待填写) **批改区** (待批改) ### 核心-8 [填空] 委托声明关键字是 `____` **你的作答** (待填写) **批改区** (待批改) ### 核心-9 [填空] 事件订阅语法:`publisher.SomeEvent ____ Handler;` **你的作答** (待填写) **批改区** (待批改) ### 核心-10 [代码阅读] 输出是什么: ```csharp class A { public virtual void M() => Console.Write("A"); } class B : A { public override void M() => Console.Write("B"); } A x = new B(); x.M(); ``` **你的作答** (待填写) **批改区** (待批改) ### 核心-11 [代码阅读] 输出是什么: ```csharp int Add(int a, int b = 10) => a + b; Console.WriteLine(Add(5)); ``` **你的作答** (待填写) **批改区** (待批改) ### 核心-12 [改错] 指出并修复: ```csharp interface IRun { void Go() { Console.WriteLine("go"); } } ``` **你的作答** (待填写) **批改区** (待批改) ### 核心-13 [简答] `override` 与 `new` 隐藏成员的行为区别 **你的作答** (待填写) **批改区** (待批改) ### 核心-14 [简答] 什么时候用接口,什么时候用抽象类(简述判断标准) **你的作答** (待填写) **批改区** (待批改) ### 核心-15 [编程] 设计 `Shape` 抽象类,派生 `Circle/Rectangle`,实现 `GetArea()` **你的作答** (待填写) **批改区** (待批改) ### 核心-16 [编程] 实现泛型方法 `Swap(ref T a, ref T b)` **你的作答** (待填写) **批改区** (待批改) ### 核心-17 [编程] 定义一个 `event EventHandler`,在数据变化时触发 **你的作答** (待填写) **批改区** (待批改) ### 核心-18 [编程] 实现一个只读集合包装(对外不可修改,内部可维护) **你的作答** (待填写) **批改区** (待批改) --- ## 进阶(18题) ### 进阶-1 [选择] `async/await` 中,`await` 作用是:A. 创建线程 B. 异步等待任务完成 C. 阻塞 UI 线程 D. 强制并行 **你的作答** (待填写) **批改区** (待批改) ### 进阶-2 [选择] 表示“一个无返回值异步操作”的常用返回类型:A. `void` B. `Task` C. `object` D. `Result` **你的作答** (待填写) **批改区** (待批改) ### 进阶-3 [选择] LINQ 中用于投影的操作符:A. `Where` B. `Select` C. `Any` D. `Count` **你的作答** (待填写) **批改区** (待批改) ### 进阶-4 [选择] 延迟执行是 LINQ 的常见特性之一,以下通常会立即执行的是:A. `Where` B. `Select` C. `ToList` D. `OrderBy` **你的作答** (待填写) **批改区** (待批改) ### 进阶-5 [选择] `using` 语句主要用于:A. 导入命名空间 B. 自动释放资源 C. 定义别名 D. 启动任务 **你的作答** (待填写) **批改区** (待批改) ### 进阶-6 [填空] 声明取消令牌源:`var cts = new ____();` **你的作答** (待填写) **批改区** (待批改) ### 进阶-7 [填空] 正则匹配常用类型:`System.Text.RegularExpressions.____` **你的作答** (待填写) **批改区** (待批改) ### 进阶-8 [填空] 线程安全递增可用:`Interlocked.____(ref x);` **你的作答** (待填写) **批改区** (待批改) ### 进阶-9 [填空] 文件全部文本读取:`File.____(path)` **你的作答** (待填写) **批改区** (待批改) ### 进阶-10 [代码结果] 写出输出: ```csharp var nums = new[] {1,2,3,4,5}; var q = nums.Where(x => x % 2 == 1).Select(x => x * x); Console.WriteLine(string.Join(",", q)); ``` **你的作答** (待填写) **批改区** (待批改) ### 进阶-11 [代码结果] 判断是否死锁风险并说明一句原因: ```csharp Task.Run(async () => { await Task.Delay(100); }).Wait(); ``` **你的作答** (待填写) **批改区** (待批改) ### 进阶-12 [简答] `Task.WhenAll` 与顺序 `await` 的区别 **你的作答** (待填写) **批改区** (待批改) ### 进阶-13 [简答] `IEnumerable` 与 `IQueryable` 的核心差异 **你的作答** (待填写) **批改区** (待批改) ### 进阶-14 [编程] 异步读取文本文件并统计行数,支持取消(`CancellationToken`) **你的作答** (待填写) **批改区** (待批改) ### 进阶-15 [编程] 用 LINQ 完成:给定学生列表,按班级分组后求每组平均分并降序输出 **你的作答** (待填写) **批改区** (待批改) ### 进阶-16 [编程] 实现一个简单缓存 `MemoryCache`(带过期时间) **你的作答** (待填写) **批改区** (待批改) ### 进阶-17 [编程] 写一个扩展方法 `IsNullOrEmptyEx(this string? s)` **你的作答** (待填写) **批改区** (待批改) ### 进阶-18 [编程] 设计一个可并发调用的计数器类,要求线程安全 **你的作答** (待填写) **批改区** (待批改)