news 2026/4/18 0:13:31

C#重构代码的8种基本方法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C#重构代码的8种基本方法

重构是指在不改变代码行为的情况下,提高代码的可读性、可维护性和效率的过程。本文介绍8种重构C#代码的基本方法。

1. 删除冗余代码

重构前

List<int> userIds = new List<int>();
userIds.AddRange(output.Select(s => s.UserId).Distinct().ToList());
userIds = userIds.Distinct().ToList();

重构后

var userIds = output.Select(s => s.UserId).Distinct().ToList();

2. 使用LINQ替代循环

重构前

List<int> evenNumbers = new List<int>();
foreach (var num in numbers) {
if (num % 2 == 0) {
evenNumbers.Add(num);
}
}

重构后

var evenNumbers = numbers.Where(n => n % 2 == 0).ToList();

3. 避免重复代码(封装方法)

重构前

var segmentIDs = output.Select(s => s.SegmentID).Distinct().ToList();
if (segmentIDs.Any()) {
segments = db.CheckCode
.Where(c => segmentIDs.Contains(c.CheckCodeID))
.ToList();
}

重构后

List<int> GetDistinctIDs<T>(IEnumerable<T> source, Func<T, int?> selector) =>
source.Select(selector).Where(id => id.HasValue).Select(id => id.Value).Distinct().ToList();

4. 使用空合并和三元运算符

重构前

string name;
if (user != null && user.Name != null) {
name = user.Name;
} else {
name = "Unknown";
}

重构后

string name = user?.Name ?? "Unknown";

5. 使用var提升可读性

重构前

List<int> numbers = new List<int> { 1, 2, 3, 4 };

重构后

var numbers = new List<int> { 1, 2, 3, 4 };

6. 避免嵌套的if语句

重构前

if (user != null) {
if (user.Age > 18) {
Console.WriteLine("Adult");
}
}

重构后

if (user == null) return;
if (user.Age <= 18) return;
Console.WriteLine("Adult");

7. 使用字符串插值

重构前

string message = string.Format("Hello, {0}! You have {1} messages.", name, count);

重构后

string message = $"Hello, {name}! You have {count} messages.";

8. 使用async/await提升性能

重构前

public List<User> GetUsers() {
return db.Users.ToList();
}

重构后

public async Task<List<User>> GetUsersAsync() {
return await db.Users.ToListAsync();
}

总结

在代码重构时,应该始终遵循以下原则:

  • 可读性:代码应当易于理解。
  • 可维护性:让未来的开发者能够轻松修改代码。
  • 性能:避免不必要的计算和冗余操作。
  • DRY(不要重复自己):提取可复用的逻辑到方法中,提高代码复用性。

译文:csharp.com/article/learn-c-sharp-refactor-code

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 23:19:18

Moonlight安卓串流:手机变身游戏终端的完整指南

Moonlight安卓串流&#xff1a;手机变身游戏终端的完整指南 【免费下载链接】moonlight-android GameStream client for Android 项目地址: https://gitcode.com/gh_mirrors/mo/moonlight-android 想要在手机上流畅体验PC端的3A大作吗&#xff1f;Moonlight安卓串流技术…

作者头像 李华
网站建设 2026/4/17 9:00:44

高速信号下奇偶校验时序匹配设计:关键问题解析

高速信号下的奇偶校验设计&#xff1a;当“1位校验”遇上皮秒级时序挑战你有没有遇到过这种情况&#xff1f;系统跑得好好的&#xff0c;突然报出一个“奇偶校验错误”&#xff0c;但复现起来难如登天。重启之后又恢复正常&#xff0c;日志里只留下一条孤零零的告警记录。在低速…

作者头像 李华
网站建设 2026/4/16 14:34:56

使用Altium Designer进行电源管理电路设计完整指南

用Altium Designer打造高可靠性电源系统&#xff1a;从原理到PCB的实战全解析你有没有遇到过这样的情况&#xff1f;电路功能逻辑完全正确&#xff0c;元器件选型也看似合理&#xff0c;但上电后MCU莫名其妙复位、ADC采样噪声飙升、高速接口频繁误码……最后排查半天&#xff0…

作者头像 李华
网站建设 2026/4/17 13:41:46

零基础入门led灯珠品牌选择(照明场景适用)

明明白白选灯珠&#xff1a;零基础也能看懂的LED品牌实战指南你有没有过这样的经历&#xff1f;买了一盏标称“高亮节能”的LED灯&#xff0c;用不到半年就开始发暗、变黄&#xff0c;甚至闪烁不停。维修师傅拆开一看&#xff1a;“这灯珠太差了。”其实问题不在灯具本身&#…

作者头像 李华
网站建设 2026/4/17 20:58:31

ResNet18参数详解:1000类识别模型调优手册

ResNet18参数详解&#xff1a;1000类识别模型调优手册 1. 引言&#xff1a;通用物体识别中的ResNet-18价值定位 1.1 行业背景与技术演进 在计算机视觉领域&#xff0c;图像分类是基础且关键的任务之一。从早期的SIFT特征分类器方法&#xff0c;到2012年AlexNet引爆深度学习革…

作者头像 李华
网站建设 2026/4/16 19:45:08

掌握Mordred分子描述符:5个简单步骤快速提升化学信息学效率

掌握Mordred分子描述符&#xff1a;5个简单步骤快速提升化学信息学效率 【免费下载链接】mordred a molecular descriptor calculator 项目地址: https://gitcode.com/gh_mirrors/mo/mordred 在化学信息学和药物发现领域&#xff0c;分子描述符计算是理解分子性质、进行…

作者头像 李华