先说原因,c#的字符串拼接方式中,有一种叫内插字符串 interpolation ,形如:
string name = "张三";
int age = 22;
string gender = "男";
string result2 = $"{name} {age} {gender}";
正常编译运行的结果,result2的值为张三 22 男,
但是这种语法并不是支持所有的编译器/.net运行环境,所以在环境变迁的时候,会报语法错误。
error CS1056: Unexpected character '$' // 或 error CS1056: 意外的字符“$”
解决:
- 尝试切换开发编译环境下的一些环境依赖配置。 需要应对新环境可能带来的的其他问题。
- 手动修改所有内插字符串为String.Format()方式。 手动工作量大,易出错。
两种场景:多个变量拼接为一个字符串变量,多个变量一次性输出。
不同语言有自己的多种写法。
所有语言通用的方式是使用字符串拼接符+,不过会有性能影响、代码书写麻烦、阅读纷乱等缺点。
-
JavaScript中的模板字符串
或console.log()本身就可以传入多个变量进行输出。 -
Python中的%x占位符 result = "%s %d"%("asdasd", 22)
以及format() result = 'Hello {0}! My name is {1}.'.format('World', 'test') -
Java中的System.out.printf("%s %d", "name zhang", 22)
或 String result = String.format("%s %d", "name zhang", 22)
而c#中,也有几种方式。
c#中的字符串拼接方式- 字符串拼接符 +
- public static String Format(String format, object? arg0) 默认推荐(最通用)
string name = "张三";
int age = 22;
string gender = "男";
string result = String.Format("{0} {1} {2}", name, age, gender);
Console.WriteLine(result); // "张三 22 男"
- 字符串内插 编译开发环境统一时推荐
能否支持该语法,取决于使用的编译器版本和.net运行环境
比如:在VSCode中配置了C:WindowsMicrosoft.NETFrameworkv4.0.30319csc.exe作为.cs源码文件的编译器。
C:>C:WindowsMicrosoft.NETFrameworkv4.0.30319csc.exe Microsoft (R) Visual C# Compiler version 4.8.3752.0 for C# 5 Copyright (C) Microsoft Corporation. All rights reserved. This compiler is provided as part of the Microsoft (R) .NET Framework, but only supports language versions up to C# 5, which is no longer the latest version. For compilers that support newer versions of the C# programming language, see http://go.microsoft.com/fwlink/?LinkID=533240 warning CS2008: 未指定源文件 error CS1562: 必须为没有源的输出指定 /out 选项
此时使用内插字符串是会报错的:
error CS1056: Unexpected character '$' // 或: error CS1056: 意外的字符“$”
而使用 Visual Studio 新建 ASP.NET Web 应用程序 (.NET Framework) C# 项目时,要选一个.net framework的版本:
但是我在Visual Studio中使用这种语法,编译通过+运行成功。
(Visual Studio中编译c#项目使用的编译器/.net运行环境,我还不知道查看/修改方式)。



