是否可以将FormattableString转换为String.Format()使用的内容,反之亦然?
我可以以某种方式将$"val={x}“转换为("val={0}", new[]{x})吗
或者,我是否可以定义一个接受(FormattableString s)或(string s, params object[])的方法
我尝试在不重复代码的情况下实现以下两个方法,作为一个方法:
public void Log(FormattableString formatStr)
{
Console.WriteLine(str.ToString());
foreach (var arg in str.GetArguments().OfType<MyClass>())
Console.WriteLine(arg.GetDescription());
}
public void Log(String formatStr, params object[] args)
{
Console.WriteLine(formatStr, args);
foreach (var arg in args.OfType<MyClass>())
Console.WriteLine(arg.GetDescription());
}以便下面的两个调用执行相同的代码:
var x = new MyClass();
Log($"val={x}");
Log("val={0}", x);发布于 2018-08-02 22:13:55
FormattableString已经有了参数和格式字符串,所以只需委托:
public void Log(FormattableString formatStr) =>
Log(formatStr.Format, formatStr.GetArguments());
public void Log(String formatStr, params object[] args)
{
Console.WriteLine(formatStr, args);
foreach (var arg in args.OfType<MyClass>())
{
Console.WriteLine(arg.GetDescription());
}
}正如注释中所指出的,这有一个不幸的属性,即Log($"x={x}")选择第二个重载而不是第一个重载。我看看我能做些什么.
https://stackoverflow.com/questions/51655642
复制相似问题