C# 中的数据类型: Double、整数、浮点数、字符

⚡ 智能摘要

C# 中的数据类型定义了变量可以保存的值的类型,从整数和浮点数到布尔值和字符串值,并且它们决定了每个变量在程序执行期间保留多少内存。

  • 🔢 整数类型: Int32 关键字 (int) 将整数(例如 10、20 或 30)存储在固定的内存范围内。
  • 🔣 浮点类型: double 和 float 存储的是十进制值,而 decimal 则为财务计算提供更高的精度。
  • ☑️ 布尔类型: 布尔关键字只存储真或假,并驱动条件逻辑。
  • 🔤 文本类型: char 存储单个字符,string 存储一系列字符作为文本。
  • 🧩 价值与参考: 值类型直接存储数据,而字符串等引用类型存储内存地址。
  • 🤖 人工智能辅助: GitHub Copilot 和 ML.NET 为 C# 类型处理带来了代码建议和机器学习功能。

C# 中的数据类型

C# 中的数据类型有哪些?

C# 语言带有一组基本数据类型。这些数据类型用于构建应用程序中使用的值。让我们探索 C# 中可用的基本数据类型。对于每个示例,我们将仅修改 Program.cs 文件中的主要函数。

1) 整数

整数数据类型用于处理数字。在这种情况下,数字是整数,如 10、20 或 30。在 C# 中,数据类型用 Int32 关键字。下面是如何使用这种数据类型的示例。在我们的示例中,我们将定义一个名为 num 的 Int32 变量。然后我们将为该变量分配一个整数值,然后相应地显示它。

C# 中的整数数据类型

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
 class Program
 { 
  static void Main(string[] args) 
  {
   Int32 num=30;
   Console.Write(num);  
   
   Console.ReadKey();
  }
 }
}

Code 解释:-

  1. 指定 Int32 数据类型来声明一个名为 num 的整数变量。然后为该变量分配一个值 30。
  2. 最后使用 console.write 函数将数字显示到控制台。

如果上述代码输入正确,并且程序成功执行,将显示以下输出。

输出:

C# 中的整数数据类型

从输出中,你可以清楚地看到控制台中显示了名为 num 的整数变量

2) Double

双精度数据类型用于处理小数。在这种情况下,数字是整数,如 10.11、20.22 或 30.33。在 C# 中,数据类型用关键字“Double“。下面是此数据类型的一个示例。

在我们的示例中,我们将定义一个名为 num 的双精度变量。然后我们将分配一个 Double 将值赋给变量然后相应地显示它。

Double C# 中的数据类型

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
 class Program
 { 
  static void Main(string[] args) 
  {
   double num=30.33;
   Console.Write(num); 
   
   Console.ReadKey();
  }
 }
}

Code 解释:-

  1. 指定 double 数据类型来声明 double 类型 变量 称为 num。然后为该变量分配一个值 30.33。
  2. 最后使用 console.write 函数将数字显示到控制台。

如果上述代码输入正确,并且程序成功执行,将显示以下输出。

输出:

Double C# 中的数据类型

从输出中,你可以清楚地看到名为 num 的双精度变量显示在控制台中

3)布尔值

布尔数据类型用于处理布尔值 真假在 C# 中,数据类型用 Boolean 关键字表示。下面是可以使用此数据类型的示例。

在我们的示例中,我们将定义一个名为“status”的布尔变量。然后,我们将为该变量分配一个布尔值,然后相应地显示它。

C# 中的布尔数据类型

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
 class Program
  { 
   static void Main(string[] args) 
   {
    Boolean status=true;
    Console.Write(status);
    
    Console.ReadKey();
   }
  }
}

Code 解释:-

  1. 指定布尔数据类型来声明一个名为“status”的布尔变量。然后为该变量分配一个 true/false 值。
  2. 最后使用console.write函数将布尔值显示到控制台。

如果上述代码输入正确,并且程序执行成功,则会显示输出。

输出:

C# 中的布尔数据类型

从输出中,你可以清楚地看到控制台中显示了等于 true 的布尔变量

4) 字符串

字符串数据类型用于处理字符串值。在 C# 中,数据类型用关键字“String”表示。下面是此数据类型的一个示例。

在我们的示例中,我们将定义一个名为“message”的字符串变量。然后,我们将为该变量分配一个字符串值,然后相应地显示它。

C# 中的字符串数据类型

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
 class program
 {
  static void Main(string[] args)
  {
   String message="Hello";
   Console.Write(message);
   
   Console.ReadKey();
  }
 }
}

Code 解释:-

  1. 指定字符串数据类型来声明一个名为 message 的字符串变量。然后为该变量分配一个值“Hello”。
  2. 最后,使用console.write函数将字符串值显示到控制台。

如果上述代码输入正确,并且程序执行成功,则会显示输出。

输出:

C# 中的字符串数据类型

从输出中,你可以清楚地看到名为 message 的字符串变量显示在控制台中

C# 数据类型完整列表

以上四个示例涵盖了最常见的数据类型,但 C# 提供了一整套内置值数据类型。每种类型都会占用固定的内存空间并接受特定的值范围,因此选择能够安全容纳数据的最小类型可以确保程序高效运行。

数据类型 尺寸 范围 / Description
字节 1字节 0到255
2字节 32,768到32,767
int(Int32) 4字节 2,147,483,648到2,147,483,647
8字节 非常大的整数(±9.2 千万亿)
浮动 4字节 精度约为 6-7 位的小数
翻番 8字节 精度约为 15-16 位的小数
十进制 16字节 用于货币的高精度小数(28-29 位有效数字)
坦克 2字节 单个 Unicode 字符
布尔 1字节 对或错

除了这些值类型之外,字符串类型是最常用的引用类型,它可以存储任意长度的字符序列。选择合适的类型可以防止溢出错误和不必要的内存占用。

C# 中的值类型与引用类型

所有 C# 数据类型都属于以下两类之一:值类型和引用类型。这种区分决定了 C# 如何存储数据,以及在复制变量或将其传递给方法时变量的行为。

  • 值类型: 这些类型直接存储实际数据,通常存储在栈上。例如:int、double、bool、char。 枚举`int` 和 `struct` 都是值类型。将一个变量赋值给另一个变量会复制该值,因此这两个变量保持独立。
  • 参考类型: 这些类型存储的是指向堆上数据的引用(内存地址)。字符串、对象、数组和类实例都是引用类型。复制引用变量只会复制地址,因此两个变量共享的是同一个对象。

值类型变量永远不会为空,因为它始终持有一个值,而未初始化的引用类型变量默认值为空。理解这种区别有助于预测数据在程序中的流动方式。

C# 中的类型转换

C# 经常需要将值从一种数据类型转换为另一种数据类型,例如将用户输入(始终是文本)转换为数字。这个过程称为类型转换,主要有三种方式。

  • 隐式转换: 当不存在数据丢失风险时,例如将 int 类型赋值给 double 类型,编译器会自动进行转换。无需特殊语法。
  • 显式转换(类型转换): 你需要将目标类型放在括号中,例如 (int)myDouble类型转换可能会丢失数据——将 double 类型转换为 int 类型会丢失小数部分——所以你是有意承担这种风险的。
  • 辅助方法: Convert 类 (Convert.ToInt32) 和每种类型的 Parse 方法 (int.Parse) 将字符串转换为数字,而 ToString 将值转换回可读文本。

选择正确的转换可以保持数据的准确性,并防止在赋值语句两侧的类型不匹配时出现运行时错误。

常见问题

float、double 和 decimal 都存储十进制数,但精度和大小有所不同。float 使用 4 个字节,大约可以存储 7 位数字;double 使用 8 个字节,大约可以存储 15 位数字;而 decimal 使用 16 个字节,用于存储高精度的金融数值。

实际上没有区别。int 是 C# 中 .NET System.Int32 类型的别名,因此 int 和 Int32 编译后的结果完全相同。大多数开发者为了简洁起见使用 int,而 Int32 则明确地指明了底层框架类型。

字符串是一种引用类型,因为它存储的是指向堆上字符数据的引用。然而,它在某些方面又像值类型:字符串是不可变的,因此每次更改都会创建一个新的字符串对象,而不是修改旧的对象。

可空类型允许诸如 int 或 bool 之类的值类型也包含空值,空值用尾随问号表示,例如 int?。这对于可选数据和数据库字段非常有用,因为缺失值必须与零或 false 区分开来。

字符类型(char)只能存储一个 Unicode 字符,并使用单引号括起来,例如 'A'。字符串类型(string)可以存储零个或多个字符,并使用双引号括起来。字符类型是值类型,而字符串类型是引用类型。

`var` 在编译时推断变量的类型,并在运行时固定该类型,同时完全支持 IntelliSense。`dynamic` 将类型检查延迟到运行时,因此类型错误仅在执行期间才会出现。为了确保安全性,请使用 `var`;为了灵活、后期绑定,请使用 `dynamic`。

是的。GitHub Copilot 会建议在 Visual Studio 中进行类型声明、转换和样板代码编写。 Visual Studio Code它可以推荐合适的数值类型或生成解析代码,但您应该检查其输出,因为建议可能会忽略精度或溢出问题。

是的。ML.NET 将 C# 数据类型映射到模型特征,使用数值类型(例如 float 和 double)表示训练数据,使用字符串表示文本。强类型数据类描述了每一列,因此机器学习模型可以自然地集成到 C# 应用程序中。

总结一下这篇文章: