xml內(app.config)有
<add key="MailBody" value="單位:{DepartmentName}" />
C#讀取
var temp = System.Configuration.ConfigurationManager.AppSettings["MailBody"];
mailForm.MailBody = $"{temp}";
整串如果都在C#內會是下面這樣(DepartmentName為code內的變數)
mailForm.MailBody = $"單位:{DepartmentName}";
預期能呈現
單位:業務部
都在C#內的話,結果就如預期般的
但從app.config讀取的話
單位:{DepartmentName}
$ 特殊字元未起到作用
有什麼辦法可以讀取變數嗎?
首先,由於Config屬於文字檔
,無論用什麼方法,您只能從Config獲得字串
如果您想要透過字串
來搜尋變數
,您可以參考sion大提供的作法的作法,透過Reflection,不過這個做法有個缺點,您還是必須在Config針對變數
設定對應的key-value
,不然您很難切出對應的變數
。
我個人是建議,如果您要這樣做的話,可能用String.Replace會比較簡單,e.g.
app.config
<add key="MailBody" value="單位:{DepartmentName}" />
Main.cs
string temp = System.Configuration.ConfigurationManager.AppSettings["MailBody"];
mailForm.MailBody = temp.Replace("{DepartmentName}", DepartmentName);
因為你的$是作用在temp上阿
如果要動態抓變數的話要用reflection<add key="MailBody" value="DepartmentName" />
public string DepartmentName;
///////////////
var temp = System.Configuration.ConfigurationManager.AppSettings["MailBody"];
var result = this.GetType().GetField(temp).GetValue(this);
$
是 C# 的語法糖,實際上編譯後還是轉成string.Format
,並不是 $
不起作用,而是你誤解了他的用法,如果你想要讓他產生作用,可以改用string.Format
。
後來發現不論是string.Format還是$都無法用在runtime,最後自己寫解決...
我講錯東西了QQ,我想到的東西是 YoChen 說的 replace,像這樣
var mailBody = "單位:@DepartmentName";
var departmentNameA = "A部門";
var other = "其他條件";
var parameters = new Dictionary<string, object>();
parameters.Add("@DepartmentName", departmentNameA);
parameters.Add("@other", other);
var result = parameters.Aggregate(mailBody, (current, parameter)=> current.Replace(parameter.Key, parameter.Value.ToString()));
不然你也可以參考這個套件 https://github.com/axuno/SmartFormat
你如果是要用共用變數的話,
可以另外寫一個Class來放變數啊.