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

时间:2014-12-30 10:03:35

标签: 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();
    }

}

这将在LinqPad中返回“是我的名字”。我希望它返回“NIELS是我的名字”。我只使用ToUpper作为一个简单的例子。

2 个答案:

答案 0 :(得分:4)

简短回答

目前无法在SmartFormat格式括号内调用扩展程序

要提供此类功能,SmartFormat必须在项目的所有程序集中查找string的扩展方法,如in this thread所述。

示例评论

  • 格式化字符串

正如project documentation中所述,您可以直接在格式大括号中使用 ToUpper()方法,就像这样(因为该方法不带任何参数):< / p>

Smart.Format("{Name.ToUpper} is my name", ps).Dump();

也许SmartFormat开发人员将来应该引入大/小写格式说明符,因为很多人都在寻找这样的东西。然而,对于他们来说这将是一个相当大的挑战,因为ToUpper()ToLower()调用似乎总是比任何其他实现或语法糖更快。

  • 格式化字符串外

另一种方法是在格式化字符串之外调用扩展方法,但之后会失去Reflection Syntax优势......

Smart.Format("{0} is my name", ps["Name"].Foo()).Dump();

答案 1 :(得分:0)

不会返回是我的名字,无法在SmartFormart.NET中调用扩展名方法