C# 字符串是基本类型吗?

C# 字符串是基本类型吗?,c#,.net,vb.net,string,primitive-types,C#,.net,Vb.net,String,Primitive Types,我对字符串和基本类型很好奇。冠词like表示字符串是基元类型。但是,在MSDN上,未将字符串列为基本类型 但是,当我运行第二篇文章中提供的代码时,它显示字符串不是基元类型 有谁能告诉我这一点吗?两篇文章都说string不是一种原始类型。事实并非如此 如果编译并运行第二篇文章中的示例代码,它将打印: 字符串不是基元类型 我认为关于这一点的困惑在于,创建新字符串的语法类似于创建值类型 定义值类型时,所有这些值都相等(在32位系统上) 创建引用类型字符串时,如下所示: System.String s

我对字符串和基本类型很好奇。冠词like表示字符串是基元类型。但是,在MSDN上,未将字符串列为基本类型

但是,当我运行第二篇文章中提供的代码时,它显示字符串不是基元类型


有谁能告诉我这一点吗?

两篇文章都说string不是一种原始类型。事实并非如此

如果编译并运行第二篇文章中的示例代码,它将打印:

字符串不是基元类型

我认为关于这一点的困惑在于,创建新字符串的语法类似于创建值类型

定义值类型时,所有这些值都相等(在32位系统上)

创建引用类型字符串时,如下所示:

System.String s = new System.String(new char[]{'h', 'e', 'l', 'l', 'o'});
System.String s = "hello";
string s = "hello";
我们还可以按值比较字符串,即使它们是引用类型:

s == "hello";//true
这仍然不会使字符串成为基本类型

对此的公认答案应该会提供详细信息。

.NET定义(来自您的文章):

基本类型有布尔型、字节型、SByte型、Int16型、UInt16型、Int32型、UInt32型、Int64型、UInt64型、Char型、Double型和Single型

所以,不。内在的,非常重要的:是的,但不是原始的


VB使用了与CLI和C稍有不同的定义。

立场更改更新:否,因为代码不存在

Console.WriteLine(typeof(string).IsPrimitive); => False
Console.WriteLine(typeof(int).IsPrimitive); => True
-----更新结束。
但一些在线文档似乎将字符串视为原语。我认为是的——基于以下“原始”的定义。(我个人的定义是一种不能进一步细分为组件类型的类型。但我想我们只是在“迂腐”,这对我来说基本上不是问题。)

C#中的所有基本数据类型都是 系统命名空间中的对象。对于 每个数据类型、短名称或 提供了别名

资料来源: 另一条赞成——

小结:我想答案取决于你对原语的定义,它的定义并不明确。
来源:

否,字符串不是基元类型

但是,它有一些与基元类型相同的特征

该语言支持代码中的字符串文字,因此不必使用
new
关键字显式创建
string
实例来获取字符串对象

还支持使用
+
运算符连接字符串,编译器将其转换为对
String.Concat
方法的调用


字符串是不可变的,这意味着它在大多数情况下都具有值类型语义,就像基元类型一样。

字符串是一种特殊的基元类型。它不是值类型,但可以被视为基元类型,因为它可以通过编写文本来创建,例如/“hello”,并且可以声明字符串类型的常量。话虽如此,IsPrimitive的值返回false

Console.WriteLine("hello".GetType().IsPrimitive) // output = False
编辑:我想在这里收回我的答案。从技术上讲,它不是一个基元类型,但与我上面提到的属性相同。

在c#中,这些类型主要定义为两种类型:值类型和基元类型

首先请参见C#中基本类型的定义

另一方面,所有原始数据 C#中的类型是系统中的对象 命名空间。对于每种数据类型,一个简短的 提供了名称或别名。对于 例如,int是 System.Int32和double是最短的 系统的形式

现在,请阅读本文,了解其中的区别:

System.String
映射到“
String
”,这是CLI中的基本类型。但在现实中,值类型是堆栈中的类型,而不是堆空间中的类型


因此,关键是值类型与基本类型的对比。根据微软对原语的定义,它是一种原语类型,但在更一般的意义上,它不是。

它们不是,因为它们是字符序列。

根据微软对“原语”的定义,字符串不被视为原语类型。另一方面,Microsoft倾向于使用术语,而没有真正制定明确或一致的定义(例如“非托管资源”),并且可以有效地定义“基元”以包括“字符串”、“数组”和“对象”,因为如果没有这些基元,就无法定义可以有效模拟它们的类型。

“Microsoft”对基元类型的定义

给定上下文中只有基元类型的定义

  • 将基元类型定义为以下类型:
    • System.Boolean
    • System.Byte
    • System.SByte
    • System.Int16
    • System.UInt16
    • System.Int32
    • System.UInt32
    • System.Int64
    • System.UInt64
    • System.IntPtr
    • System.uintpttr
    • System.Char
    • System.Double
    • System.Single
  • VB.NET规范版本10(第7.3节)将“基本类型”定义为具有类型的关键字别名的类型(因此允许在不导入
    系统
    命名空间的情况下使用该类型),一种使用文本定义该类型实例的方法;并允许将这些类型用作常量;VB.NET中的基元类型有:
    • System.Byte
    • System.SByte
    • System.UInt16
      UShort
    • System.Int16
      Short
    • System.UInt32
      UInteger
    • System.Int32
      Integer
    • System.UInt64
      ULong
    • System.Int64
      Long
    • System.Single
    • System.Doubl
      
      Console.WriteLine("hello".GetType().IsPrimitive) // output = False