Python 在 f 字符串中的自记录表达式是否有 C# 等价物?

Ada*_*Er8 4 c# python string-interpolation

从 Python 3.8 开始,可以在 f 字符串中使用自记录表达式,如下所示:

>>> variable=5
>>> print(f'{variable=}')
variable=5
Run Code Online (Sandbox Code Playgroud)

C# 中有等效的功能吗?

Ada*_*sko 5

不,但你可以使用InterpolatedStringHandlerandCallerArgumentExpression自己编写:

[InterpolatedStringHandler]
public ref struct SelfDocumentingStringHandler
{
    StringBuilder builder;

    public SelfDocumentingStringHandler(int literalLength, int formattedCount)
    {
        builder = new StringBuilder(literalLength);
    }

    public void AppendLiteral(string s)
    {
        builder.Append(s);
    }

    public void AppendFormatted<T>(T t, [CallerArgumentExpression(nameof(t))] string member = "")
    {
        builder.Append(member + "=");
        builder.Append(t);
    }

    internal string GetFormattedText() => builder.ToString();
}

void Print(ref SelfDocumentingStringHandler stringHandler)
{
    Console.WriteLine(stringHandler.GetFormattedText());
}
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样使用它:

var variable = 5;
Print($"{variable}"); // prints: variable=5
Run Code Online (Sandbox Code Playgroud)