程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 利用Attribute和反射從模板生成短信(2)

利用Attribute和反射從模板生成短信(2)

編輯:關於C語言

獲取Key-Value的Helper類代碼:

public class SmsGeneratorHelper
    {
        /// <summary>
        /// 從短信實體獲取要替換的鍵值對,用以替換短信模板中的變量
        /// </summary>
        /// <param name="objMessage">短信實體</param>
        /// <returns></returns>
        public static Dictionary<string, string> GetMessageKeyValue(object objMessage)
        {
            Type msgType = objMessage.GetType();
            Dictionary<string, string> dicMsg = new Dictionary<string, string>();
            Type typeDescription = typeof(DescriptionAttribute);
            PropertyInfo[] proList = msgType.GetPropertIEs();

            string strKey = string.Empty;
            string strValue = string.Empty;
            foreach (PropertyInfo pro in proList)
            {
                //利用反射取得屬性的get方法。
                MethodInfo m = pro.GetGetMethod();
                //利用反射調用屬性的get方法,取得屬性的值
                object rs = m.Invoke(objMessage, null);

                object[] arr = pro.GetCustomAttributes(typeDescription, true);
                if (!(arr.Length > 0))
                {
                    continue;
                }

                DescriptionAttribute aa = (DescriptionAttribute)arr[0];
                strKey = aa.Description;

                dicMsg.Add(strKey, rs.ToString());
            }
            return dicMsg;
        }
    }

測試代碼:

 Message msg = new Message() { UserName = "張三", Content = "祝你生日快樂",Date=DateTime.Now.ToString("yyyy-MM-dd")};
        Dictionary<string,string> nvc = SmsGeneratorHelper.GetMessageKeyValue(msg);
        string template = "[用戶名],今天是[日期],[內容]";
        Console.WriteLine("模板是:{0}", template);

        foreach(KeyValuePair<string,string> kvp in nvc)
        {
            template = template.Replace(kvp.Key, kvp.Value);
        }
        Console.WriteLine("替換後的內容:{0}", template);

看到了吧,結果出來了,而那段惡心的代碼“template.Replace("[用戶名]", userName).Replace("[日期]", date).Replace("[內容]", content)”消失了。

如果有新模板了,直接寫一個模板實體類,將裡面的字段貼上[Description("xxx")]標簽就可以很方便生成短信了。

至於如何給模板實體類賦值(具體業務的問題),那就不是本文討論的范圍了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved