[英]How to use C# extension methods with SmartFormat reflection syntax?
是否可以使以下示例與SmartFormat.NET一起使用?
void Main()
{
Dictionary<string,string> ps = new Dictionary<string, string>();
ps["Name"] = "Niels";
Smart.Format("{Name.Foo} is my name", ps).Dump();
}
public static class Extensions
{
public static string Foo(this string bar)
{
return bar.ToUpper();
}
}
這將在LinqPad中返回“是我的名字”。 我希望它返回“ NIELS是我的名字”。 我僅使用ToUpper作為簡單示例。
當前無法在SmartFormat
格式括號內調用擴展方法 。
為了提供這樣的功能, SmartFormat
必須在項目的所有程序SmartFormat
尋找string
的擴展方法,如本線程所述 。
根據項目文檔中的指定,您可以像這樣在格式括號內直接使用ToUpper()
方法 (因為該方法沒有任何參數):
Smart.Format("{Name.ToUpper} is my name", ps).Dump();
也許SmartFormat
開發人員將來會引入大寫/小寫格式說明SmartFormat
,因為很多人正在尋找這樣的東西。 但是,對他們來說這將是一個很大的挑戰,因為ToUpper()
和ToLower()
調用總是看起來比任何其他實現或語法糖都快。
另一種方法是在格式設置字符串之外調用擴展方法 ,但隨后您將失去反射語法的優勢...
Smart.Format("{0} is my name", ps["Name"].Foo()).Dump();
不,它將返回我的名字 ,不能在SmartFormart.NET中調用擴展方法
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.