是否可以使以下示例与 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/