2

是否可以使以下示例与 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 中返回“is my name”。我希望它返回“NIELS 是我的名字”。我仅使用 ToUpper 作为一个简单的示例。

4

2 回答 2

5

简短的回答

当前无法SmartFormat在格式化大括号内调用扩展方法。

要提供这样的功能,SmartFormat必须在项目的所有程序集中寻找扩展方法string,如该线程中所述。

示例审查

  • 格式化字符串内部

项目文档中所述,您可以ToUpper()直接在格式大括号内使用该方法,如下所示(因为该方法不带任何参数):

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

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

  • 在格式化字符串之外

另一种方法是在格式化字符串之外调用扩展方法,但是你会失去反射语法的优势......

Smart.Format("{0} is my name", ps["Name"].Foo()).Dump();
于 2014-12-30T11:40:00.400 回答
0

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

于 2014-12-30T10:38:26.317 回答