我很难理解为什么这段代码会产生这样的结果:
$ type t.cs
using System;
using static System.Console;
using static System.Environment;
class P
{
public static void Main()
{ uint a=1;
string b="a string";
string c=String.Format ( $"{0}t{1}" , a , b) ;
Out.WriteLine( c );
Exit(0);
}
}
$ csc t.cs
Microsoft (R) Visual C# Compiler version 2.9.0.63208 (958f2354)
Copyright (C) Microsoft Corporation. All rights reserved.
$ .T.EXE
0 1
我已经阅读了关于字符串的文档。格式:https://learn.microsoft.com/en-us/dotnet/api/system.string.format?view=net-5.0
但我仍然不知道如何解释为什么上面的代码打印"0 & lt; tab> 1";而不是"1
谁能给我点化一下吗?
这个插入的字符串文字表达式:
$"{0}t{1}"
将计算为:
"0t1"
…在传递给string.Format()
之前,因为它没有占位符,输入参数被忽略,结果字符串只是"0t1"
。
更改为:
string c = String.Format("{0}t{1}", a, b); // no interpolation of template string
或
string c = $"{a}t{b}"; // expand a and b inline using interpolation
因为你正在使用字符串插值->美元"{}";{0}和{1}在这种情况下不是占位符,它们是字面量。删除字符串"{0}t{1}"前的美元符号;你会得到你想要的。