在好例子网,分享、交流、成长!
<<

C# 入门教程(C#语法- 2.数据类型)

数据类型是编程语言中用于存储不同种类数据的分类。

graph LR
A[数据类型] --> B[整数类型-int long short byte]
A --> C[浮点数类型-float double decimal]
A --> D[字符类型-char]
A --> E[字符串类型-string]
A --> F[布尔类型-bool]
A --> G[数组类型-array]
A --> H[枚举类型-enum]
A --> I[时间日期类型-DateTime]
A --> J[集合类型-List Dictionary HashSet]
A --> K[对象类型-class struct]




下面是每种数据类型的简介以及示例代码:

整数类型(int、long、short、byte):

  • 应用场景:这些整数类型用于表示整数值。
类型 取值范围 常见应用场景
int -2,147,483,648 到 2,147,483,647 int 是最常用的整数类型,适合大多数常规整数计算,比如计数、索引、循环等。它通常用于表示年龄、数量、计数器等。
long -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 当需要处理更大范围的整数时,例如处理时间戳、表示文件大小或内存使用量等大量数据时,使用 long 类型可以确保数值不会溢出。
short -32,768 到 32,767 short 类型通常用于需要节省内存空间的情况,或者在特定硬件或网络协议中要求使用 16 位整数进行通信或存储。
byte 0 到 255 byte 类型通常用于表示字节数据,比如图像数据、文件字节等。它也可用于表示位标志和布尔值。

选择合适的整数类型取决于所处理数据的范围和内存要求。若不确定具体使用哪个类型,一般来说,可以首先选择 int 类型作为默认整数类型,并在需要更大范围时转而使用 long 类型。对于需要节省内存或者明确知道数值范围的情况下,可以考虑使用 shortbyte 类型。

示例代码:

using System;

class Program
{
    static void Main()
    {
        int age = 20;
        long population = 7000000000L;
        short temperature = -10;
        byte numberOfStudents = 30;

        Console.WriteLine("年龄: " + age);
        Console.WriteLine("人口数量: " + population);
        Console.WriteLine("温度: " + temperature);
        Console.WriteLine("学生人数: " + numberOfStudents);
    }
}

浮点数类型(float、double、decimal):

  • 应用场景:这些类型用于表示带有小数部分的数字。 float 和 double 适用于大多数浮点数计算,其中 double 提供更高的精度。 decimal 用于金融和货币计算等需要更高精度的场景。
数据类型 存储范围 精度 应用场景
float ±1.5 × 10-45 到 ±3.4 × 1038 约7位有效数字 科学计算、图形处理、大规模数据集合、性能要求较高的计算
double ±5.0 × 10-324 到 ±1.7 × 10308 约15位有效数字 一般性计算、金融计算、工程计算、科学计算
decimal ±1.0 x 10-28 到 ±7.9 x 1028 28-29位有效数字 货币计算、金融计算、税务计算、精确计数

示例代码:

using System;

class Program
{
    static void Main()
    {
        float weight = 65.5f;
        double pi = 3.1415926;
        decimal price = 9.99m;

        Console.WriteLine("体重: " + weight);
        Console.WriteLine("圆周率: " + pi);
        Console.WriteLine("价格: " + price);
    }
}

字符类型(char):

  • 应用场景:char 类型用于表示单个字符。它经常用于处理文本、字符串操作和字符级别的操作。

示例代码:

using System;

class Program
{
    static void Main()
    {
        char grade = 'A';
        char symbol = '$';

        Console.WriteLine("等级: " + grade);
        Console.WriteLine("符号: " + symbol);
    }
}

字符串类型(string):

  • 应用场景:string 类型用于表示一系列字符,通常用于处理和操作文本数据。

示例代码:

using System;

class Program
{
    static void Main()
    {
        string name = "小张";
        string sentence = "Hello, world!";

        Console.WriteLine("姓名: " + name);
        Console.WriteLine("句子: " + sentence);
    }
}

布尔类型(bool):

  • 应用场景:bool 类型用于表示逻辑上的真或假值。它通常用于条件判断和控制流程。

示例代码:

   using System;

   class Program
   {
       static void Main()
       {
           bool isStudent = true;
           bool hasPermission = false;

           Console.WriteLine("是否学生: " + isStudent);
           Console.WriteLine("是否有权限: " + hasPermission);
       }
   }

数组类型(array):

  • 应用场景:数组是一种用于存储多个相同类型元素的数据结构。它广泛应用于存储和处理集合数据。

示例代码:

   using System;

   class Program
   {
       static void Main()
       {
           int[] numbers = { 1, 2, 3, 4, 5 };
           string[] names = { "小李", "小张", "小芳" };

           Console.WriteLine("数字:");
           foreach (int number in numbers)
           {
               Console.WriteLine(number);
           }

           Console.WriteLine("姓名:");
           foreach (string name in names)
           {
               Console.WriteLine(name);
           }
       }
   }

枚举类型(enum):

  • 应用场景:枚举是一种用户定义的类型,用于定义一组命名的常量值。它们可以在代码中提供更好的可读性和可维护性。

示例代码:

   using System;

   enum DayOfWeek { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday }

   class Program
   {
       static void Main()
       {
           DayOfWeek today = DayOfWeek.Monday;

           Console.WriteLine("今天是 " + today);
       }
   }

时间日期类型(DateTime):

  • 应用场景:DateTime 类型用于表示日期和时间。它广泛用于处理日期和时间相关的操作,例如计算时间间隔、格式化日期等。

示例代码:

using System;

class Program
{
    static void Main()
    {
        // 获取当前日期和时间
        DateTime now = DateTime.Now;
        Console.WriteLine("当前日期和时间: " + now);

        // 获取当前日期
        DateTime today = DateTime.Today;
        Console.WriteLine("当前日期: " + today);

        // 格式化日期时间
        string formattedDateTime = now.ToString("yyyy-MM-dd HH:mm:ss");
        Console.WriteLine("格式化后的日期时间: " + formattedDateTime);

        // 获取日期的年份、月份和日
        int year = now.Year;
        int month = now.Month;
        int day = now.Day;
        Console.WriteLine("年份: " + year);
        Console.WriteLine("月份: " + month);
        Console.WriteLine("日: " + day);

        // 添加或减去时间间隔
        DateTime futureDate = now.AddDays(7);
        DateTime pastDate = now.AddMonths(-1);
        Console.WriteLine("一周后的日期: " + futureDate);
        Console.WriteLine("一个月前的日期: " + pastDate);

        // 计算时间间隔
        TimeSpan timeSpan = futureDate - now;
        Console.WriteLine("时间间隔: " + timeSpan.Days + "天");

        // 比较日期
        DateTime date1 = new DateTime(2023, 9, 1);
        DateTime date2 = new DateTime(2023, 9, 3);
        int compareResult = DateTime.Compare(date1, date2);
        Console.WriteLine("日期比较结果: " + compareResult);

        // 判断闰年
        bool isLeapYear = DateTime.IsLeapYear(year);
        Console.WriteLine("是否为闰年: " + isLeapYear);

        // 获取指定日期所在周的第一天和最后一天
        DateTime firstDayOfWeek = GetFirstDayOfWeek(now);
        DateTime lastDayOfWeek = GetLastDayOfWeek(now);
        Console.WriteLine("本周第一天: " + firstDayOfWeek);
        Console.WriteLine("本周最后一天: " + lastDayOfWeek);
    }

    static DateTime GetFirstDayOfWeek(DateTime date)
    {
        DayOfWeek dayOfWeek = date.DayOfWeek;
        int daysToAdd = ((int)dayOfWeek - 1) * -1;
        return date.AddDays(daysToAdd).Date;
    }

    static DateTime GetLastDayOfWeek(DateTime date)
    {
        DayOfWeek dayOfWeek = date.DayOfWeek;
        int daysToAdd = 7 - (int)dayOfWeek;
        return date.AddDays(daysToAdd).Date;
    }
}

集合类型(List、Dictionary、HashSet):

  • 应用场景:集合类型用于存储和操作多个元素的数据结构。
集合类型 特点 用途
List 有序、可重复的集合 存储任意类型的元素,按索引访问元素,动态添加、删除或修改元素。
Dictionary<TKey, TValue> 键值对的集合 存储具有唯一键的元素,通过键快速查找和访问元素。
HashSet 无序、唯一元素的集合 高效地检查元素是否存在,执行集合间的交集、并集、差集等操作。

简要介绍及区别总结:

  1. List<T>List<T> 是一个有序的、可重复的集合,用于存储任意类型的元素。可以通过索引访问列表中的元素,并且可以动态地添加、删除或修改列表中的元素。例如:
using System;
using System.Collections.Generic;

public class Program
{
    public static void Main()
    {
        List<int> numbers = new List<int>();
        numbers.Add(1);//index =0
        numbers.Add(2);//index =1
        numbers.Add(3);//index =2 

        Console.WriteLine(numbers[0]);  // 输出结果为:1

        numbers.RemoveAt(0);
	Console.WriteLine(numbers[0]);  // 输出结果为:2
        Console.WriteLine(numbers.Count);  // 输出结果为:2
    }
}

  1. Dictionary<TKey, TValue>Dictionary<TKey, TValue> 是一个键值对的集合,用于存储具有唯一键的元素。每个元素都由一个键和一个与之关联的值组成。可以通过键来访问、添加、修改或删除字典中的元素。例如:
using System;
using System.Collections.Generic;

public class Program
{
    public static void Main()
    {
        Dictionary<string, int> ages = new Dictionary<string, int>();
        ages["小码"] = 25;
        ages["小张"] = 30;
        ages["小李"] = 35;

        Console.WriteLine(ages["小张"]);  // 输出结果为:30

        ages.Remove("小码");
        Console.WriteLine(ages.ContainsKey("小李123"));  // 输出结果为:False
    }
}
  1. HashSet<T>HashSet<T> 是一个无序的、唯一元素的集合。它不允许重复的元素,并且可以高效地检查元素是否存在。可以向集合中添加、删除元素,以及执行集合间的交集、并集、差集等操作。例如:
using System;
using System.Collections.Generic;

public class Program
{
    public static void Main()
    {
        HashSet<string> fruits = new HashSet<string>();
        fruits.Add("apple");
        fruits.Add("banana");
        fruits.Add("apple");  // 不会被添加,因为已经存在了

        Console.WriteLine(fruits.Count);  // 输出结果为:2

        fruits.Remove("banana");
        Console.WriteLine(fruits.Contains("banana"));  // 输出结果为:False
    }
}

Array和List都可应用于存储和处理集合数据,它俩的区别如下:

区别 Array(数组) List(列表)
大小 固定大小 可变大小
内存分配方式 分配连续内存块 动态数组分配和释放内存
元素访问和操作 索引直接访问和修改元素 提供丰富的方法进行操作
类型限制 可包含任意类型的元素 通常用于存储引用类型元素
API支持 提供基本方法和属性 提供更多丰富的方法和功能

这个表格可以帮助你更清楚地理解Array和List之间的差异。

对象类型(class、struct):

  • 应用场景:对象类型用于创建自定义的数据类型和数据结构。class 和 struct 分别用于定义引用类型和值类型的对象。它们适用于创建具有属性和方法的自定义数据类型。

class和struct区别 示例代码:

using System;

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }

    public Person(string name, int age)
    {
        Name = name;
        Age = age;
    }

    public void Greet()
    {
        Console.WriteLine("Hello, 我的名字是 {0} ,我已经 {1} 岁了.", Name, Age);
    }
}

public struct Point
{
    public int X { get; set; }
    public int Y { get; set; }

    public Point(int x, int y)
    {
        X = x;
        Y = y;
    }

    public void PrintCoordinates()
    {
        Console.WriteLine("坐标: ({0}, {1})", X, Y);
    }
}

public class Program
{
    public static void Main(string[] args)
    {
        // 使用class创建对象
        Person person = new Person("小马", 25);
        person.Greet();
        Console.WriteLine("姓名: {0}, 年龄: {1}", person.Name, person.Age);

        // 使用struct创建对象
        Point point = new Point(5, 10);
        point.PrintCoordinates();
        Console.WriteLine("X: {0}, Y: {1}", point.X, point.Y);
    }
}

在上述示例中,我们定义了一个表示人员的class(Person)和一个表示二维坐标点的struct(Point)。我们创建了一个Person对象(person)和一个Point对象(point),并分别展示了它们的特点。

通过这个完整可运行的示例代码,可以清晰地看到class和struct的区别:

  1. class是引用类型,Person对象存储在堆上,而struct是值类型,Point对象存储在栈上。
  2. 传递class对象时,实际上传递的是对堆上对象的引用;传递struct对象时,会将整个值复制到新的变量中。
  3. class有自动生成的无参构造函数,而struct没有默认无参构造函数。
  4. class的对象可以为null,而struct的对象不可为null。
  5. class支持单继承和多层继承,而struct只能通过接口实现来达到类似的效果。

小结

这么多数据类型以及用法,不需要大家死记硬背,知道有它的存在就好,就像读书一样,很多时候我们不是读了立刻用起来,而是在将来的某一天,它会神助。

大家有任何问题都可以加关注后在评论区留言,或者加客服一对一咨询。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

报警