解决
先说原因,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()
方式。 手动工作量大,易出错。
Intro
两种场景:多个变量拼接为一个字符串变量,多个变量一次性输出。
不同语言有自己的多种写法。
所有语言通用的方式是使用字符串拼接符+
,不过会有性能影响、代码书写麻烦、阅读纷乱等缺点。
-
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:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe
作为.cs
源码文件的编译器。
C:\>C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.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运行环境,我还不知道查看/修改方式)。