今天我遇到了一个奇怪的困惑。虽然我在这篇文章中读到了C#中String和string之间的区别:What is the difference between String and string in C#?。但是当我尝试在不使用命名空间String
的情况下使用大写字母System
时,它无法识别。喜欢
此代码有效,
using System;
String s = "";
但是如果不使用System
,就会出错。
而带有小写字母的string
可以使用和不使用System
命名空间。
如果String和string是相同的东西那么为什么一个只能用它的命名空间和其他有和没有命名空间的工作。
答案 0 :(得分:4)
string
是一个C#构造,在编译到System.String
期间翻译。
每个C#程序默认都有:
using string = System.String;
using char = System.Char;
using int = System.Int32;
using double = System.Double;
System.String
是班级。您无法使用String
类型而无法访问System
命名空间(因此,完全限定为System.String
或使用using System;
指令)。
答案 1 :(得分:1)
String
是System.String
的别名。查看您在链接到的SO答案上获得728分数的答案,以获取一些别名的列表。如果您使用别名,它会自动抓取System.
位,因此您无需显式引用它,因为它已经存在。
答案 2 :(得分:1)
System.String是System命名空间的一个类。 字符串直接引用它。
当您键入string时,可以访问System.String的所有方法(和构造函数等)。
与Nullable<T>
相同:
你可以写,例子
int? myInt = 2;
与
相同Nullable<int> myInt = 2;
仅Alias实用程序
答案 3 :(得分:1)
好想到这个如下
假设我们有一个Namespace Foo,它有一个名为Boo的类。现在如果我们需要调用Boo,我们需要使用“Using”关键字在项目中包含它。
如果我们为ex创建一个别名(不确定是否可能):Foo.Boo&gt; NewBoo
在这种情况下,编译器会将其视为Foo.Boo
这里是String case。
当我们编写编译为System.String的 string 时,我们不需要进行任何类型的System Namespace来访问字符串。
但是对于Just String,我们需要包含它。
答案 4 :(得分:1)
实际上,如果没有using System;
,这将无法编译。行String name = "me";
class Program
{
static void Main(string[] args)
{
string name1 = "me";
String name2 = "me";
}
}
当我将鼠标放在string
时,它显示为class System.String
,当我将其放在String
时,它会显示the type or namespace String could not be found