c# - 如何通过 SmartFormat 反射语法使用 C# 扩展方法?

标签 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 作为一个简单的示例。

最佳答案

简短回答

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

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

示例评论

  • 在格式字符串内

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

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

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

  • 在格式字符串之外

另一种方法是在格式字符串之外调用扩展方法,但这样你就会丢失 Reflection Syntax优点...

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

关于c# - 如何通过 SmartFormat 反射语法使用 C# 扩展方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27703329/

相关文章:

c# - 我怎样才能创建一个 WPF 样式,以便所有图像控件上都有一个 MouseDown(click) 事件?

c# - 从桌面应用程序获取 "modern"Windows 应用程序的图标?

java - 如何使用反射从scala调用spark UDF?

reflection - 如何在 Kotlin 中检查类型是否是枚举?

c# - ToList() 方法在哪里? (可查询)

c# - MongoDB .NET 驱动程序 2.0 中的 FindAll

c#检测何时有太多对象

java - 仅通过其简单名称反射性地找到一个类

asp.net-mvc - UrlHelper扩展方法调用编码未执行

flutter - 未找到 Dart 扩展功能