首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WriteLine表达式和结果值?

WriteLine表达式和结果值?
EN

Stack Overflow用户
提问于 2021-12-19 03:10:46
回答 1查看 46关注 0票数 2

我经常需要记录或写入表达式的值,以及提供上下文的内容。例如:

代码语言:javascript
复制
WriteLine($"_managedHandlePtr:{_managedHandlePtr}");
WriteLine($"metadata.GetNative(_ptr, handle):{metadata.GetNative(_ptr, handle)}");

可以从内插字符串中获取原始表达式吗?在概念上类似于下面。如果我能消除其中令人讨厌的部分,但得到相同的输出,那就太好了:

代码语言:javascript
复制
LogExpression($"{_managedHandlePtr}");
LogExprsssion($"{metadata.GetNative(_ptr, handle)}");

// Writes the non-interpolated string expression, a colon, then the evaluated string
void LogExpression(FormattableString formattableString)
{
  Console.WriteLine(${formattableString.GetExpression()}:{formattableString.ToString()});
}

输出:

代码语言:javascript
复制
_managedHandlePtr:213456
metadata.GetNative(_ptr, handle):0xG5DcS4

如果必须包含原始字符串的表示法,也是可以的:

代码语言:javascript
复制
{_managedHandlePtr}:213456
EN

回答 1

Stack Overflow用户

发布于 2021-12-19 03:34:26

我认为,除了FormtableString的参数类型之外,您不能得到更多的信息。

代码语言:javascript
复制
static class Program
{
    static void Main(string[] args)
    {
        Number a = new Number(1.0);     // 1.0
        Percent b = new Percent(2.0);   // 2%
        double c = a + b;

        Console.WriteLine(Format($"{a} + {b} = {c}"));
        // Number + Percent = Double : 1 + 2% = 1.02
    }

    static string Format(this FormattableString expression, CultureInfo info = null)
    {
        if (info == null)
        {
            info = CultureInfo.InvariantCulture;
        }
        object[] names = expression.GetArguments().Select((arg) => arg.GetType().Name).ToArray();
        return $"{string.Format(expression.Format, names)} : {expression.ToString(info)}";
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70408730

复制
相关文章

相似问题

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