首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在字符串和( FormattableString,params object[])之间转换

在字符串和( FormattableString,params object[])之间转换
EN

Stack Overflow用户
提问于 2018-08-02 22:05:27
回答 1查看 842关注 0票数 1

是否可以将FormattableString转换为String.Format()使用的内容,反之亦然?

我可以以某种方式将$"val={x}“转换为("val={0}", new[]{x})

或者,我是否可以定义一个接受(FormattableString s)(string s, params object[])的方法

我尝试在不重复代码的情况下实现以下两个方法,作为一个方法:

代码语言:javascript
复制
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());
}

以便下面的两个调用执行相同的代码:

代码语言:javascript
复制
var x = new MyClass();
Log($"val={x}");
Log("val={0}", x);
EN

回答 1

Stack Overflow用户

发布于 2018-08-02 22:13:55

FormattableString已经有了参数和格式字符串,所以只需委托:

代码语言:javascript
复制
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}")选择第二个重载而不是第一个重载。我看看我能做些什么.

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51655642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档