掌握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#教程专栏欢迎订阅!

相关推荐
u0109147601 天前
CSS组件库如何快速扩展_通过Sass @extend继承基础布局
jvm·数据库·python
baidu_340998821 天前
Golang怎么用go-noescape优化性能_Golang如何使用编译器指令控制逃逸分析行为【进阶】
jvm·数据库·python
m0_678485451 天前
如何利用虚拟 DOM 实现无痕刷新?基于 VNode 对比的状态保持技巧
jvm·数据库·python
不吃香菜学java1 天前
Redis的java客户端
java·开发语言·spring boot·redis·缓存
qq_342295821 天前
CSS如何实现透明背景效果_通过RGBA色彩模式控制透明度
jvm·数据库·python
TechWayfarer1 天前
知乎/微博的IP属地显示为什么偶尔错误?用IP归属地查询平台自检工具3步验证
网络·python·网络协议·tcp/ip·网络安全
Greyson11 天前
CSS如何处理超长文本换行问题_结合word-wrap属性
jvm·数据库·python
justjinji1 天前
如何批量更新SQL数据表_使用UPDATE JOIN语法提升效率
jvm·数据库·python
小江的记录本1 天前
【网络安全】《网络安全常见攻击与防御》(附:《六大攻击核心特性横向对比表》)
java·网络·人工智能·后端·python·安全·web安全
贵沫末1 天前
python——打包自己的库并安装
开发语言·windows·python