簡體   English   中英

是否有 C# 等效於 Python 在 f 字符串中的自記錄表達式?

[英]is there a C# equivalent for Python's self-documenting expressions in f-strings?

從 Python 3.8 開始,可以像這樣在 f 字符串中使用自記錄表達式

>>> variable=5
>>> print(f'{variable=}')
variable=5

C# 中是否有等效功能?

不,但是你可以使用InterpolatedStringHandlerCallerArgumentExpression自己寫:

[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());
}

然后你可以像這樣使用它:

var variable = 5;
Print($"{variable}"); // prints: variable=5

是的。

int variable = 5;
Console.WriteLine($"variable={variable}");

輸出:

variable=5

這里的關鍵是字符串文字前面的$


要使用動態名稱來做你想做的事,我建議使用擴展方法的更明確的方法。 嘗試這個:

public static class SelfDocExt
{
    public static string SelfDoc<T>(
        this T value,
        [CallerArgumentExpression(nameof(value))] string name = "")
        => $"{name}={value}";
}

然后你可以這樣寫:

int variable = 5;
Console.WriteLine($"{variable.SelfDoc()}");

它在不破壞字符串插值的情況下解決了您的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM