为什么你的 C# portfolio 决定一切,或者说如何在上百份简历中脱颖而出
\n\n你已经学会了语法,掌握了类、接口,甚至写了几行控制台程序。恭喜你,你不再是“零基础”了。但问题是:一个 Junior C# 开发者的职位会收到 50–100 份简历。HR 或技术主管如何知道你就是那颗钻石,而不是又一个从培训班出来的“就业保障”学员?
\n\n答案很简单:你的 C# portfolio。不是技术列表,而是可以实际体验(或者至少在本地运行)的鲜活项目。在这篇文章中,我收集了 7 个 C# 开发者的 portfolio 项目创意——从简单到中等难度。每个创意不仅仅是“做个计算器”,而是一个完整的案例,附带解释为什么它很酷以及应该写什么样的代码。
\n\n筛选标准:什么让一个项目成为 portfolio 的“最佳”选择
\n\n在开始写代码之前,我们先达成共识:portfolio 中的项目应该解决三个问题:
\n- \n
- 展示技术栈掌握程度——不仅仅是 C#,还有 ASP.NET Core、Entity Framework、API 操作。 \n
- 展示架构理解——设计模式、SOLID 原则、职责分离。 \n
- 解决实际问题——即使是一个自用工具,也应该是实用的。 \n
我故意没有包含“待办事项列表”或“计算器”——这些都是基础,已经无法打动任何人了。我们开始吧!
\n\n1. 任务管理 Telegram 机器人(带提醒功能)
\n\nTelegram 机器人是 portfolio 的理想形式。它们紧凑、视觉直观,并且与真实 API 交互。你的机器人将接收命令,将任务保存到数据库,并发送提醒。
\n\n为什么这很酷:
\n- \n
- 与外部 API(Telegram Bot API)交互。 \n
- 后台任务(Hangfire 或 BackgroundService)。 \n
- Entity Framework Core + SQLite(或 PostgreSQL)。 \n
代码示例:启动提醒后台服务
\npublic class ReminderService : BackgroundService\n{\n private readonly IServiceProvider _services;\n private readonly ILogger<ReminderService> _logger;\n\n public ReminderService(IServiceProvider services, ILogger<ReminderService> logger)\n {\n _services = services;\n _logger = logger;\n }\n\n protected override async Task ExecuteAsync(CancellationToken stoppingToken)\n {\n while (!stoppingToken.IsCancellationRequested)\n {\n using (var scope = _services.CreateScope())\n {\n var db = scope.ServiceProvider.GetRequiredService<AppDbContext>();\n var now = DateTime.UtcNow;\n var dueTasks = db.Tasks.Where(t => t.DueDate <= now && !t.IsNotified).ToList();\n\n foreach (var task in dueTasks)\n {\n // 通过 TelegramClient 发送消息\n await SendTelegramMessage(task.UserId, $"提醒:{task.Title}");\n task.IsNotified = true;\n }\n await db.SaveChangesAsync();\n }\n await Task.Delay(TimeSpan.FromMinutes(1), stoppingToken);\n }\n }\n}\n\n\n建议:添加 /start、/add、/list、/done 命令。并且一定要包含 Dockerfile,让机器人一键启动。
\n\n2. 网页解析器并导出到 Excel
\n\n创建一个控制台应用程序,例如解析 Ozon 或 Wildberries(或任何其他网站)的商品,并将结果保存到 .xlsx 文件中。这将展示你能够处理 HTML、HTTP 以及 EPPlus 或 ClosedXML 等库。
\n\n我们将使用:
\n- \n
- HttpClient 用于请求。 \n
- HtmlAgilityPack 或 AngleSharp 用于解析。 \n
- EPPlus 用于生成 Excel。 \n
代码示例:解析标题