C#重构代码的8种基本方法
重构是指在不改变代码行为的情况下,提高代码的可读性、可维护性和效率的过程。本文介绍8种重构C#代码的基本方法。
-
删除冗余代码
重构前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();
-
使用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();
-
避免重复代码(封装方法)
重构前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();
-
使用空合并和三元运算符
重构前string name; if (user != null && user.Name != null) { name = user.Name; } else { name = "Unknown"; }
重构后
string name = user?.Name ?? "Unknown";
-
使用var提升可读性
重构前List<int> numbers = new List<int> { 1, 2, 3, 4 };
重构后
var numbers = new List<int> { 1, 2, 3, 4 };
-
避免嵌套的if语句
重构前if (user != null) { if (user.Age > 18) { Console.WriteLine("Adult"); } }
重构后
if (user == null) return; if (user.Age <= 18) return; Console.WriteLine("Adult");
-
使用字符串插值
重构前string message = string.Format("Hello, {0}! You have {1} messages.", name, count);
重构后
string message = $"Hello, {name}! You have {count} messages.";
-
使用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