繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM