Nie*_*sma 2 c# reflection extension-methods smartformat.net
是否可以使以下示例与 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();
}
}
Run Code Online (Sandbox Code Playgroud)
这将在 LinqPad 中返回“是我的名字”。我希望它返回“NIELS 是我的名字”。我仅将 ToUpper 用作一个简单示例。
小智 5
目前无法在SmartFormat格式化大括号内调用扩展方法。
要提供这样的功能,SmartFormat必须string在项目的所有程序集中寻找扩展方法,如本线程中所述。
如项目文档中所述,您可以ToUpper()直接在格式大括号内使用该方法,如下所示(因为该方法不带任何参数):
Smart.Format("{Name.ToUpper} is my name", ps).Dump();
Run Code Online (Sandbox Code Playgroud)
也许SmartFormat开发人员应该在未来引入大写/小写格式说明符,因为很多人都在寻找这样的东西。然而,这将是对他们相当大的挑战是ToUpper()和ToLower()电话似乎总是比任何其他实施或语法糖更快。
另一种方法是在格式化字符串之外调用扩展方法,但是这样你就失去了反射语法的优势......
Smart.Format("{0} is my name", ps["Name"].Foo()).Dump();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1324 次 |
| 最近记录: |