掌握C#: 从基础到精通 - 中级实战练习集

文章目录

你是否已经掌握了C#的基础知识,正在寻找更多挑战来提升你的能力?那么,这篇文章就是为你准备的。我们精心挑选并设计了10个中级水平的C#练习题,涵盖了异常处理、文件操作、LINQ查询以及类与对象等核心概念。通过完成这些任务,你不仅可以巩固所学知识,还能够进一步提高解决实际问题的技能。现在开始吧!

异常处理

尝试-捕获结构

编写一个函数 DivideNumbers 接受两个整数参数并返回它们的除法结果。如果除数为零,则在适当区域捕获 DivideByZeroException 并输出友好信息。

c 复制代码
public double DivideNumbers(int num1, int num2)
{
    try
    {
        return (double)num1 / num2;
    }
    catch (DivideByZeroException)
    {
        Console.WriteLine("Error: Cannot divide by zero.");
        return 0; // 返回默认值或特定错误代码
    }
}

注释: 注意异常处理使得我们能够优雅地处理运行时发生的错误,并保证程序不会在遇到预期内错误时崩溃。

文件 I/O 练习

追加而不覆盖

将文本追加到一个文件中 myfile.txt 而不覆盖它现有的内容。

答案:

c 复制代码
string path = "myfile.txt";
string textToAppend = "Hello, World!";

File.AppendAllText(path, textToAppend);

注释: AppendAllText 方法会自动向文件末尾添加字符串,并且如果目标文件不存在,则创建它。

处理目录

创建一个名为"TestFolder"的目录,并检查其是否成功创建。

答案:

c 复制代码
string folderPath = @"TestFolder";

// 创建目录
Directory.CreateDirectory(folderPath);

// 检查目录是否存在
if (Directory.Exists(folderPath))
{
    Console.WriteLine("Folder created successfully.");
}
else
{
    Console.WriteLine("Folder creation failed.");
}

LINQ 查询练习

筛选集合中的对象

假设存在一个 List 列表,使用LINQ查询出所有分数超过90分的学生列表。

答案:

c 复制代码
public class Student
{
    public string Name { get; set; }
    public int Score { get; set; }
}

var students = new List<Student>
{
    new Student { Name = "Alice", Score = 95 },
    new Student { Name = "Bob", Score = 89 },
    // 更多学生...
};

var topStudents = students.Where(s => s.Score > 90).ToList();

foreach (var student in topStudents)
{
    Console.WriteLine($"{student.Name} has a score of {student.Score}");
}

排序复杂对象

给定一个员工列表 List,按员工年龄进行升序排序-若年龄相同,则根据姓名降序排序。

答案:

c 复制代码
public class Employee 
{ 
   public string Name { get; set; } 
   public int Age { get; set; } 
}

List<Employee> employees = GetEmployees(); // 假定此函数返回员工列表.

IEnumerable<Employee> sortedEmployees =
     employees.OrderBy(e => e.Age).ThenByDescending(e => e.Name);

foreach(Employee emp in sortedEmployees)
{
   Console.WriteLine($"Name: {emp.Name}, Age: {emp.Age}");
}

类与对象练习

继承与多态性

创建抽象类Shape和其子类Circle。Circle类需要重写方法计算面积。

答案:

c 复制代码
public abstract class Shape 
{ 
   public abstract double CalculateArea(); 
}

public class Circle : Shape 
{ 
   public double Radius { get; private set; }

   public Circle(double radius) 
   {
       Radius = radius;
   }

   public override double CalculateArea() 
   {
       return Math.PI * Radius * Radius;
   }
}
// 使用:
Circle circle = new Circle(5); 
Console.WriteLine($"The area of the circle is: {circle.CalculateArea()}");

希望以上示例能够帮助您在C#编程之路上更进一步。每个人都有独特的学习方式:无论是通过书籍阅读、观看教程视频、还是直接编码实践,最关键的是保持好奇心,并享受探索未知领域所带来的成就感。祝您愉快地在解决问题和构建解决方案过程中发展出自己强大的技术栈!

觉得本篇写得还不错,可以点赞,评论,关注,主页有C#教程专栏欢迎订阅!

相关推荐
兵慌码乱7 小时前
基于Python+PyQt5+SQLite的药房管理系统实现:事务一致性与界面解耦全流程解析
python·sqlite·信号与槽·pyqt5·数据库设计·桌面应用开发·事务处理
金銀銅鐵8 小时前
[Python] 体验用欧几里得算法计算最大公约数的过程
python·数学
FreakStudio12 小时前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
用户03321266636713 小时前
使用 Python 从零创建 Word 文档
python
小码编匠14 小时前
C# 工控上位机必备:数据转换工具类与十个核心模块
后端·c#·.net
Csvn18 小时前
Python 两大经典坑点 —— 可变默认参数 & 闭包延迟绑定
后端·python
曲幽19 小时前
别再用网页翻译看源码了!你的私人翻译神器LibreTranslate,部署避坑指南来了
python·docker·web·pot·translate·libretranslate·arogstranslate
用户5569188175320 小时前
#从脚本到独立程序:Python + Playwright 批量抓取的完整踩坑记录
python·自动化运维
兵慌码乱1 天前
基于 MediaPipe 与 PySide2 的手势交互音乐控制系统实现:轻量化视觉交互全流程解析
python·opencv·计算机视觉·人机交互·手势识别·mediapipe·pyside2
luckdewei2 天前
FastAPI 资产管理系统实战:复杂 ORM 关联、Alembic 迁移与 N+1 查询优化
python