iT邦幫忙

2022 iThome 鐵人賽

DAY 22
1
Software Development

離開C#新手村的最後試煉系列 第 22

# 試煉22 - 如何用 擴充方法 來打造可讀性程式

  • 分享至 

  • xImage
  •  

開始試煉

先來看一下程式碼 這是產CSV的示意程式碼

void Main()
{
    var sb = new StringBuilder();
    var prodcut = new Prodcut { Name = "Sports & Outdoors", Price = 1200 };
    sb.Append($"{nameof(prodcut.Name)}");
    sb.Append(",");
    sb.AppendLine($"{nameof(prodcut.Price)}");
    sb.Append(prodcut.Name);
    sb.Append(",");
    sb.Append(prodcut.Price);
    sb.AppendLine();
    sb.ToString().Dump();
}
public class Prodcut
{
    public string Name { get; set; }
    public int Price { get; set; }
}

程式碼可以看到為了要加逗號做了而外的處理
但是這樣的程式碼很不好閱讀
所以可以用擴充方法來幫忙讓程式碼可讀性

void Main()
{
    var sb = new StringBuilder();
    var prodcut = new Prodcut { Name = "Sports & Outdoors", Price = 1200 };
    sb.AppendCsv($"{nameof(prodcut.Name)}");
    sb.AppendLine($"{nameof(prodcut.Price)}");
    sb.AppendCsv(prodcut.Name);
    sb.AppendLine(prodcut.Price.ToString());
    sb.ToString().Dump();
}
public static class StringBuilderExtensions
{
    public static StringBuilder AppendCsv(
    this StringBuilder stringBuilder,
    string value) => stringBuilder.Append($"{value},");
}

像是Linq 自己本身就是用擴充方法 實做完成的
可以加上自己的擴充方法 讓可讀性更佳
正常來說分頁一定要先算出 第幾頁 有一頁幾筆
才知道要跳過多少筆 再來要取幾筆

public static class IQueryableExtension
{
    public static IQueryable<T> Page<T>(
        this IQueryable<T> @list, 
        int page, 
        int pageSize)
    {
        var skip = (page - 1) * pageSize;
        return @list.Skip(skip).Take(pageSize);
    }
}

使用起來就是這樣
query = query.OrderBy(x => x.Price).Page(inputDto.Page, inputDto.PageSize);

把細節邏輯封裝到擴充方法內 加上一個好的命名
這樣程式碼的可讀性 就可以提高

結束試煉

程式碼可讀性寫的好 連維護都簡單許多喔


上一篇
# 試煉21 - LINQ 中超好用的DefaultIfEmpty
下一篇
# 試煉23 - dynamic技巧1 通靈之術
系列文
離開C#新手村的最後試煉30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言