C#重構(gòu)代碼的八種基本方法
作者:Dashrath Hapani
重構(gòu)是指在不改變代碼行為的情況下,提高代碼的可讀性、可維護(hù)性和效率的過程。本文介紹8種重構(gòu)C#代碼的基本方法。
重構(gòu)是指在不改變代碼行為的情況下,提高代碼的可讀性、可維護(hù)性和效率的過程。本文介紹8種重構(gòu)C#代碼的基本方法。
1. 刪除冗余代碼
重構(gòu)前
List<int> userIds = new List<int>();
userIds.AddRange(output.Select(s => s.UserId).Distinct().ToList());
userIds = userIds.Distinct().ToList();重構(gòu)后
var userIds = output.Select(s => s.UserId).Distinct().ToList();2. 使用LINQ替代循環(huán)
重構(gòu)前
List<int> evenNumbers = new List<int>();
foreach (var num in numbers) {
if (num % 2 == 0) {
evenNumbers.Add(num);
}
}重構(gòu)后
var evenNumbers = numbers.Where(n => n % 2 == 0).ToList();3. 避免重復(fù)代碼(封裝方法)
重構(gòu)前
var segmentIDs = output.Select(s => s.SegmentID).Distinct().ToList();
if (segmentIDs.Any()) {
segments = db.CheckCode
.Where(c => segmentIDs.Contains(c.CheckCodeID))
.ToList();
}重構(gòu)后
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. 使用空合并和三元運(yùn)算符
重構(gòu)前
string name;
if (user != null && user.Name != null) {
name = user.Name;
} else {
name = "Unknown";
}重構(gòu)后
string name = user?.Name ?? "Unknown";5. 使用var提升可讀性
重構(gòu)前
List<int> numbers = new List<int> { 1, 2, 3, 4 };重構(gòu)后
var numbers = new List<int> { 1, 2, 3, 4 };6. 避免嵌套的if語句
重構(gòu)前
if (user != null) {
if (user.Age > 18) {
Console.WriteLine("Adult");
}
}重構(gòu)后
if (user == null) return;
if (user.Age <= 18) return;
Console.WriteLine("Adult");7. 使用字符串插值
重構(gòu)前
string message = string.Format("Hello, {0}! You have {1} messages.", name, count);重構(gòu)后
string message = $"Hello, {name}! You have {count} messages.";8. 使用async/await提升性能
重構(gòu)前
public List<User> GetUsers() {
return db.Users.ToList();
}重構(gòu)后
public async Task<List<User>> GetUsersAsync() {
return await db.Users.ToListAsync();
}總結(jié)
在代碼重構(gòu)時(shí),應(yīng)該始終遵循以下原則:
- 可讀性:代碼應(yīng)當(dāng)易于理解。
- 可維護(hù)性:讓未來的開發(fā)者能夠輕松修改代碼。
- 性能:避免不必要的計(jì)算和冗余操作。
- DRY(不要重復(fù)自己):提取可復(fù)用的邏輯到方法中,提高代碼復(fù)用性。
譯文:csharp.com/article/learn-c-sharp-refactor-cod
責(zé)任編輯:武曉燕
來源:
DotNet開發(fā)跳槽























