2

今天我遇到了一个奇怪的困惑。尽管我在这篇文章中阅读了 C# 中字符串和字符串之间的区别:C# 中的字符串和字符串有什么区别?. 但是当我尝试在String不使用 namespace 的情况下使用大写字母时System,它无法识别。像

此代码有效,

using System;

String s = "";

但是不使用System,它会给出错误。

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

如果 String 和 string 是相同的东西,那么为什么一个只适用于它的命名空间而其他的也适用于和不使用命名空间。

4

5 回答 5

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;指令)。

于 2012-10-20T10:12:49.600 回答
1

String是 的别名System.String。请参阅您链接到的 SO 答案中得分为 728 的答案,以获取一些别名的列表。如果您使用别名,它会自动获取该System.位,因此您不需要显式引用它,因为它已经是。

于 2012-10-20T10:12:04.143 回答
1

System.String 是 System 命名空间的一个类。字符串直接引用它。

当您键入字符串时,您可以访问 System.String 的所有方法(和构造函数等)。

同样的事情Nullable<T>:你可以写,例子

int? myInt = 2;

这是同一件事

Nullable<int> myInt = 2;

仅别名实用程序

于 2012-10-20T10:16:05.863 回答
1

好吧,如下所示

假设我们有一个命名空间 Foo,它有一个名为 Boo 的类。现在,如果我们需要调用 Boo,我们需要使用“Using”关键字将其包含在项目中。

如果我们为 ex 创建一个别名(不确定是否可能): Foo.Boo > NewBoo

在这种情况下,编译器会将其视为 Foo.Boo

在字符串的情况下。

当我们编写编译为 System.String 的字符串时,因此我们不需要对系统命名空间进行任何形式的包含来访问字符串。

但在 Just String 的情况下,我们需要包含它。

于 2012-10-20T10:19:40.817 回答
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

于 2012-10-20T10:19:44.550 回答