首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 擴展方法進階技巧:ToString(string format) 擴展基礎版動態正則替換 (上)

     編輯:關於C語言

需求:為任意類別提供 ToString(string format),格式字串中直接嵌入屬性名,如 \"Name 生日是 Brithday\" 自動替換為實際值。

版本一實作

public static string ToString1(this object obj, string format) {
    var properties = obj.GetType().GetProperties(
        BindingFlags.GetProperty | BindingFlags.Public | BindingFlags.Instance);
    var names = properties.Select(p => p.Name).ToArray();
    var pattern = string.Join("|", names); // 動態正則:Name|Brithday|Id...
    
    return Regex.Replace(format, pattern, match => {
        var prop = properties.First(p => p.Name == match.Value);
        var val = prop.GetValue(obj, null);
        return val != null ? val.ToString() : "";
    });
}

問題

  1. 動態正則隨屬性增多而變長,效能下降
  2. 無法區分格式字串中的常數文字與屬性名(如 \"Id Id\" 會雙重替換)
  3. 無格式化支援

後續版本將逐步解決上述問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved