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