簡體   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