字符串别名在没有System.String的情况下工作但String不能

时间:2012-10-20 10:01:46

标签: c# asp.net .net string

今天我遇到了一个奇怪的困惑。虽然我在这篇文章中读到了C#中String和string之间的区别:What is the difference between String and string in C#?。但是当我尝试在不使用命名空间String的情况下使用大写字母System时,它无法识别。喜欢

此代码有效,

using System;

String s = "";

但是如果不使用System,就会出错。

而带有小写字母的string可以使用和不使用System命名空间。

如果String和string是相同的东西那么为什么一个只能用它的命名空间和其他有和没有命名空间的工作。

5 个答案:

答案 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)

StringSystem.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