如何使用带有 SmartFormat 反射语法的 C# 扩展方法?

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)