Jak utworzyć własną metodę podobną do String.Format przy użyciu formatowania kompozytowego w języku C #
Lubię, jak String.Format używa argumentów do wstrzykiwania zmiennych do łańcucha, który formatuje. Nazywa się to formowaniem kompozytowym i jest omawiane przez MSDNtutaj.
Chcę tę funkcjonalność z moją fasadą logowania:
string foo = "fancy";
string bar = "message";
log.Debug("My {0} log {1}.", foo, bar)
My ILoggerFacade ma następujący podpis metody:
void Debug<T>(T message, params Object[] args);
I wiem, że mogę to zrealizować po prostu:
ILog m_Log = \\some logging implementation
public void Debug<T>(T message, params Object[] args)
{
m_Log.Debug(String.Format(message, args));
}
Jednak w Visual Studio nie dostaję wymyślnego podświetlenia argumentów {0}, {1}, ...:
Myślę, że to ReSharper jest dla nich odpowiedzialny i wygląda na to, że ignoruje argumenty formatujące i nie udziela pomocy „intellisense”. Nie jest to dobre, ponieważ inni deweloperzy, którzy będą korzystać z elewacji, będą tego oczekiwać.
Jak uzyskać podświetlanie argumentów i „intellisense” dla niestandardowych formatowanych metod podobnych do tych, które działają:
Console.WriteLine(...)
String.Format(...)
etc...
Każda pomoc byłaby doceniana.