我经常需要记录或写入表达式的值,以及提供上下文的内容。例如:
WriteLine($"_managedHandlePtr:{_managedHandlePtr}");
WriteLine($"metadata.GetNative(_ptr, handle):{metadata.GetNative(_ptr, handle)}");可以从内插字符串中获取原始表达式吗?在概念上类似于下面。如果我能消除其中令人讨厌的部分,但得到相同的输出,那就太好了:
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()});
}输出:
_managedHandlePtr:213456
metadata.GetNative(_ptr, handle):0xG5DcS4如果必须包含原始字符串的表示法,也是可以的:
{_managedHandlePtr}:213456发布于 2021-12-19 03:34:26
我认为,除了FormtableString的参数类型之外,您不能得到更多的信息。
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)}";
}
}https://stackoverflow.com/questions/70408730
复制相似问题