ประเภทข้อมูลใน C#: Double, จำนวนเต็ม, ลอย, ถ่าน

⚡ สรุปอย่างชาญฉลาด

ชนิดข้อมูลใน C# กำหนดชนิดของค่าที่ตัวแปรสามารถเก็บได้ ตั้งแต่จำนวนเต็มและจำนวนทศนิยม ไปจนถึงค่าบูลีนและสตริง และยังกำหนดว่าตัวแปรแต่ละตัวจะใช้หน่วยความจำเท่าใดในระหว่างการทำงานของโปรแกรม

  • 🔢 ประเภทจำนวนเต็ม: คีย์เวิร์ด Int32 (int) ใช้สำหรับเก็บค่าจำนวนเต็ม เช่น 10, 20 หรือ 30 ภายในช่วงหน่วยความจำที่กำหนดไว้
  • 🔣 ประเภทจุดลอยตัว: ค่า double และ float เก็บค่าทศนิยมได้ โดยค่า decimal ให้ความแม่นยำสูงกว่าสำหรับการคำนวณทางการเงิน
  • ☑️ ประเภทบูลีน: คำหลัก Boolean เก็บค่าได้เพียงจริงหรือเท็จ และใช้ในการสร้างตรรกะแบบมีเงื่อนไข
  • 🔤 ประเภทข้อความ: char ใช้เก็บอักขระตัวเดียว และ string ใช้เก็บลำดับของอักขระเป็นข้อความ
  • 🧩 มูลค่าเทียบกับค่าอ้างอิง: ชนิดข้อมูลแบบค่า (Value types) จะเก็บข้อมูลโดยตรง ในขณะที่ชนิดข้อมูลแบบอ้างอิง (Reference types) เช่น สตริง จะเก็บที่อยู่หน่วยความจำ
  • 🤖 ความช่วยเหลือจากเอไอ: GitHub Copilot และ ML.NET นำเสนอคำแนะนำโค้ดและการเรียนรู้ของเครื่องมาใช้กับการจัดการประเภทข้อมูลใน C#

ประเภทข้อมูลในภาษา C#

ประเภทข้อมูลใน C# คืออะไร?

ภาษา C# มาพร้อมกับชุดข้อมูลพื้นฐาน ชนิดข้อมูลเหล่านี้ใช้เพื่อสร้างค่าที่ใช้ภายในแอปพลิเคชัน มาสำรวจประเภทข้อมูลพื้นฐานที่มีอยู่ใน C# กันดีกว่า สำหรับแต่ละตัวอย่าง เราจะแก้ไขเฉพาะฟังก์ชันหลักในไฟล์ Program.cs ของเรา

1) จำนวนเต็ม

ประเภทข้อมูลจำนวนเต็มใช้เพื่อทำงานกับตัวเลข ในกรณีนี้ ตัวเลขจะเป็นจำนวนเต็ม เช่น 10, 20 หรือ 30 ใน C# ประเภทข้อมูลจะแสดงด้วย คีย์เวิร์ด Int32- ด้านล่างนี้เป็นตัวอย่างวิธีการใช้ประเภทข้อมูลนี้ ในตัวอย่างของเรา เราจะกำหนดตัวแปร Int32 ที่เรียกว่า num จากนั้นเราจะกำหนดค่าจำนวนเต็มให้กับตัวแปรแล้วแสดงค่านั้นตามนั้น

ประเภทข้อมูลจำนวนเต็มใน 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 จะใช้เพื่อแสดงหมายเลขบนคอนโซล

หากป้อนโค้ดด้านบนอย่างถูกต้องและโปรแกรมทำงานสำเร็จ จะแสดงผลลัพธ์ดังต่อไปนี้

Output:

ประเภทข้อมูลจำนวนเต็มใน C#

จากผลลัพธ์ คุณสามารถเห็นได้ชัดเจนว่าตัวแปร Integer ที่เรียกว่า num ได้ถูกแสดงในคอนโซล

2) Double

ประเภทข้อมูลแบบ double ใช้สำหรับทำงานกับทศนิยม ในกรณีนี้ ตัวเลขจะเป็นจำนวนเต็ม เช่น 10.11, 20.22 หรือ 30.33 ใน C# ประเภทข้อมูลจะถูกระบุด้วยคีย์เวิร์ด “Double- ด้านล่างนี้เป็นตัวอย่างของประเภทข้อมูลนี้

ในตัวอย่างของเรา เราจะกำหนดตัวแปร 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 ตัวแปร เรียกว่าหมายเลข จากนั้นตัวแปรจะถูกกำหนดค่าเป็น 30.33
  2. ในที่สุดฟังก์ชัน console.write จะใช้เพื่อแสดงหมายเลขบนคอนโซล

หากป้อนโค้ดด้านบนอย่างถูกต้องและโปรแกรมทำงานสำเร็จ จะแสดงผลลัพธ์ดังต่อไปนี้

Output:

Double ประเภทข้อมูลในภาษา C#

จากผลลัพธ์ คุณสามารถเห็นได้ชัดเจนว่าตัวแปร double ที่เรียกว่า num ถูกแสดงในคอนโซล

3) บูลีน

ชนิดข้อมูลบูลีนใช้เพื่อทำงานกับค่าบูลีนของ จริงและเท็จ- ใน C# ประเภทข้อมูลจะแสดงด้วยคีย์เวิร์ด Boolean ด้านล่างนี้เป็นตัวอย่างของประเภทข้อมูลนี้ที่สามารถใช้ได้

ในตัวอย่างของเรา เราจะกำหนดตัวแปรบูลีนที่เรียกว่า 'สถานะ' จากนั้นเราจะกำหนดค่าบูลีนให้กับตัวแปรแล้วแสดงค่าดังกล่าวตามนั้น

ประเภทข้อมูลบูลีนใน 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. มีการระบุประเภทข้อมูลบูลีนเพื่อประกาศตัวแปรบูลีนที่เรียกว่า 'สถานะ' จากนั้นตัวแปรจะถูกกำหนดค่าเป็น true/false
  2. ในที่สุดฟังก์ชัน console.write จะใช้เพื่อแสดงค่าบูลีนไปยังคอนโซล

หากป้อนโค้ดด้านบนถูกต้องแล้วและโปรแกรมทำงานสำเร็จจะแสดงผลลัพธ์

Output:

ประเภทข้อมูลบูลีนใน C#

จากผลลัพธ์ คุณสามารถเห็นได้ชัดเจนว่าตัวแปรบูลีนซึ่งเท่ากับเป็นจริงถูกแสดงในคอนโซล

4) เชือก

ชนิดข้อมูล String ใช้เพื่อทำงานกับค่า String ใน C# ประเภทข้อมูลจะแสดงด้วยคำหลัก 'String' ด้านล่างนี้เป็นตัวอย่างของประเภทข้อมูลนี้

ในตัวอย่างของเรา เราจะกำหนดตัวแปรสตริงที่เรียกว่า 'ข้อความ' จากนั้นเราจะกำหนดค่า String ให้กับตัวแปรแล้วแสดงค่าดังกล่าวตามนั้น

ประเภทข้อมูลสตริงใน 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. มีการระบุชนิดข้อมูล String เพื่อประกาศตัวแปรสตริงที่เรียกว่าข้อความ จากนั้นตัวแปรจะถูกกำหนดค่าเป็น “Hello”
  2. สุดท้ายนี้ ฟังก์ชัน console.write ถูกใช้เพื่อแสดงค่าสตริงไปยังคอนโซล

หากป้อนโค้ดด้านบนถูกต้องแล้วและโปรแกรมทำงานสำเร็จจะแสดงผลลัพธ์

Output:

ประเภทข้อมูลสตริงใน C#

จากผลลัพธ์ คุณสามารถเห็นได้ชัดเจนว่าตัวแปร String ที่เรียกว่า message ถูกแสดงในคอนโซล

รายการประเภทข้อมูลทั้งหมดของ C#

ตัวอย่างทั้งสี่ข้างต้นครอบคลุมประเภทข้อมูลที่ใช้กันทั่วไปมากที่สุด แต่ C# มีชุดประเภทข้อมูลค่าในตัวครบถ้วน แต่ละประเภทจะสงวนหน่วยความจำไว้จำนวนหนึ่งและยอมรับช่วงค่าที่เฉพาะเจาะจง ดังนั้นการเลือกประเภทที่เล็กที่สุดที่เหมาะสมกับข้อมูลของคุณอย่างปลอดภัยจะช่วยให้โปรแกรมทำงานได้อย่างมีประสิทธิภาพ

ประเภทข้อมูล ขนาด พิสัย / Descriptไอออน
ไบต์ 1 ไบต์ เพื่อ 0 255
Short ไบต์ 2 -32,768 ไป 32,767
อินท์ (อินท์32) ไบต์ 4 -2,147,483,648 ไป 2,147,483,647
ยาว ไบต์ 8 จำนวนเต็มขนาดใหญ่มาก (±9.2 ควินทิลเลียน)
ลอย ไบต์ 4 เลขฐานสิบที่มีความแม่นยำประมาณ 6-7 หลัก
สอง ไบต์ 8 เลขฐานสิบที่มีความแม่นยำประมาณ 15-16 หลัก
ทศนิยม ไบต์ 16 ตัวเลขทศนิยมความแม่นยำสูง (28-29 หลัก) สำหรับเงิน
ถัง ไบต์ 2 อักขระยูนิโค้ดตัวเดียว
บูล 1 ไบต์ จริงหรือเท็จ

นอกจากชนิดข้อมูลแบบค่าแล้ว ชนิดข้อมูลสตริงยังเป็นชนิดข้อมูลอ้างอิงที่ใช้กันอย่างแพร่หลายที่สุด และสามารถจัดเก็บลำดับของอักขระที่มีความยาวใดๆ ก็ได้ การเลือกชนิดข้อมูลที่เหมาะสมจะช่วยป้องกันข้อผิดพลาดจากการล้นค่าและการใช้หน่วยความจำที่ไม่จำเป็น

ประเภทค่า (Value Types) กับประเภทอ้างอิง (Reference Types) ใน C#

ประเภทข้อมูลทุกประเภทใน C# แบ่งออกเป็นสองกลุ่มหลัก ได้แก่ ประเภทค่า (Value types) และประเภทอ้างอิง (Reference types) การแบ่งแยกนี้ควบคุมวิธีการจัดเก็บข้อมูลใน C# และลักษณะการทำงานของตัวแปรเมื่อคัดลอกหรือส่งผ่านไปยังเมธอด

  • ประเภทของค่า: ประเภทข้อมูลเหล่านี้เก็บข้อมูลจริงโดยตรง โดยปกติจะเก็บไว้ในสแต็ก เช่น int, double, bool, char อีนุมและ struct เป็นชนิดข้อมูลแบบค่า (value types) การกำหนดค่าให้กับตัวแปรหนึ่งจะคัดลอกค่าของตัวแปรนั้น ดังนั้นตัวแปรทั้งสองจึงยังคงเป็นอิสระต่อกัน
  • ประเภทการอ้างอิง: ตัวแปรเหล่านี้เก็บค่าอ้างอิง (ที่อยู่หน่วยความจำ) ที่ชี้ไปยังข้อมูลบนฮีป สตริง อ็อบเจ็กต์ อาร์เรย์ และอินสแตนซ์ของคลาสเป็นประเภทอ้างอิง การคัดลอกตัวแปรอ้างอิงจะคัดลอกเฉพาะที่อยู่เท่านั้น ดังนั้นตัวแปรทั้งสองจึงใช้ร่วมกันอ็อบเจ็กต์เดียวกัน

ตัวแปรประเภทค่า (value type) จะไม่มีทางเป็นค่าว่าง (null) ได้ เพราะมันจะเก็บค่าไว้เสมอ ในขณะที่ตัวแปรประเภทอ้างอิง (reference type) ที่ไม่ได้กำหนดค่าเริ่มต้นจะมีค่าเริ่มต้นเป็นค่าว่าง การเข้าใจความแตกต่างนี้จะช่วยให้คุณคาดการณ์ได้ว่าการเปลี่ยนแปลงของข้อมูลจะส่งผลต่อโปรแกรมอย่างไร

การแปลงชนิดข้อมูลใน C#

ภาษา C# มักต้องการแปลงค่าจากชนิดข้อมูลหนึ่งไปเป็นอีกชนิดข้อมูลหนึ่ง เช่น การแปลงข้อมูลที่ผู้ใช้ป้อน ซึ่งมักเป็นข้อความ ให้เป็นตัวเลข กระบวนการนี้เรียกว่าการแปลงชนิดข้อมูล และเกิดขึ้นได้สามวิธีหลักๆ

  • การแปลงโดยปริยาย: คอมไพเลอร์จะแปลงค่าโดยอัตโนมัติเมื่อไม่มีความเสี่ยงต่อการสูญเสียข้อมูล เช่น การกำหนดค่าจำนวนเต็มให้กับจำนวนทศนิยม ไม่จำเป็นต้องใช้ไวยากรณ์พิเศษใดๆ
  • การแปลงแบบชัดเจน (casting): คุณใส่ประเภทเป้าหมายไว้ในวงเล็บ ตัวอย่างเช่น (int)myDoubleการแปลงชนิดข้อมูลอาจทำให้ข้อมูลสูญหายได้ เช่น การแปลงค่า double เป็น int จะทำให้ส่วนทศนิยมหายไป ดังนั้นคุณจึงยอมรับความเสี่ยงนี้โดยสมัครใจ
  • เมธอดตัวช่วย: คลาส Convert (Convert.ToInt32) และเมธอด Parse ของแต่ละประเภท (int.Parse) จะแปลงสตริงเป็นตัวเลข ในขณะที่ ToString จะแปลงค่ากลับเป็นข้อความที่อ่านได้

การเลือกการแปลงที่ถูกต้องจะช่วยให้ข้อมูลมีความแม่นยำและป้องกันข้อผิดพลาดขณะทำงานเมื่อชนิดข้อมูลในแต่ละด้านของการกำหนดค่าไม่ตรงกัน

คำถามที่พบบ่อย

float, double และ decimal ต่างก็ใช้เก็บตัวเลขทศนิยม แต่แตกต่างกันในเรื่องความแม่นยำและขนาด float ใช้ 4 ไบต์สำหรับประมาณ 7 หลัก double ใช้ 8 ไบต์สำหรับประมาณ 15 หลัก และ decimal ใช้ 16 ไบต์สำหรับค่าทางการเงินที่มีความแม่นยำสูง

จริงๆ แล้วไม่มีความแตกต่างกันมากนัก int เป็นชื่อเรียกแทนของชนิดข้อมูล System.Int32 ใน .NET ในภาษา C# ดังนั้น int และ Int32 จึงคอมไพล์ออกมาเป็นค่าเดียวกัน นักพัฒนาส่วนใหญ่เขียน int เพื่อความกระชับ ในขณะที่ Int32 ทำให้ระบุชนิดข้อมูลพื้นฐานของเฟรมเวิร์กได้อย่างชัดเจน

สตริงเป็นชนิดข้อมูลอ้างอิง เนื่องจากมันเก็บการอ้างอิงถึงข้อมูลตัวอักษรที่เก็บไว้ในฮีป อย่างไรก็ตาม มันทำงานเหมือนชนิดข้อมูลค่าในแง่หนึ่ง คือ สตริงไม่สามารถเปลี่ยนแปลงได้ ดังนั้นทุกการเปลี่ยนแปลงจะสร้างอ็อบเจ็กต์สตริงใหม่แทนที่จะแก้ไขอ็อบเจ็กต์เดิม

ประเภทข้อมูลที่อนุญาตให้มีค่าว่าง (nullable type) ช่วยให้ประเภทข้อมูล เช่น int หรือ bool สามารถเก็บค่าว่างได้ โดยเขียนค่าว่างด้วยเครื่องหมายคำถามต่อท้าย เช่น int? มีประโยชน์สำหรับข้อมูลที่เป็นตัวเลือกและฟิลด์ในฐานข้อมูล ซึ่งค่าที่หายไปจะต้องแสดงแตกต่างจากศูนย์หรือค่าเท็จอย่างชัดเจน

char คือชนิดข้อมูลที่เก็บอักขระยูนิโค้ดได้เพียงตัวเดียว และใช้เครื่องหมายอัญประกาศเดี่ยว เช่น 'A' ส่วน string คือชนิดข้อมูลที่เก็บลำดับของอักขระตั้งแต่ศูนย์ตัวขึ้นไป และใช้เครื่องหมายอัญประกาศคู่ char เป็นชนิดข้อมูลแบบค่า (value type) ในขณะที่ string เป็นชนิดข้อมูลแบบอ้างอิง (reference type)

`var` จะอนุมานชนิดของตัวแปรในระหว่างการคอมไพล์ และชนิดนั้นจะถูกกำหนดตายตัวพร้อมการสนับสนุน IntelliSense อย่างเต็มรูปแบบ ในขณะที่ `dynamic` จะเลื่อนการตรวจสอบชนิดไปเป็นการตรวจสอบในขณะรันไทม์ ดังนั้นข้อผิดพลาดเกี่ยวกับชนิดจะปรากฏขึ้นเฉพาะในระหว่างการทำงานเท่านั้น ใช้ `var` เพื่อความปลอดภัย และใช้ `dynamic` สำหรับสถานการณ์ที่ยืดหยุ่นและขึ้นอยู่กับเงื่อนไขในภายหลัง

ใช่แล้ว GitHub Copilot จะแนะนำการประกาศประเภท การแปลง และโค้ดพื้นฐานภายใน Visual Studio และ Visual Studio Codeโปรแกรมนี้สามารถแนะนำชนิดข้อมูลตัวเลขที่เหมาะสมหรือสร้างโค้ดสำหรับการแยกวิเคราะห์ได้ แต่คุณควรตรวจสอบผลลัพธ์อีกครั้ง เนื่องจากคำแนะนำอาจมองข้ามความแม่นยำหรือปัญหาการล้นค่าได้

ใช่แล้ว ML.NET จะแมปชนิดข้อมูลของ C# กับคุณลักษณะของโมเดล โดยใช้ชนิดข้อมูลตัวเลข เช่น float และ double สำหรับข้อมูลฝึกฝน และ string สำหรับข้อความ คลาสข้อมูลที่มีการกำหนดชนิดข้อมูลอย่างชัดเจนจะอธิบายแต่ละคอลัมน์ ทำให้โมเดลแมชชีนเลิร์นนิงสามารถผสานรวมเข้ากับแอปพลิเคชัน C# ได้อย่างเป็นธรรมชาติ

สรุปโพสต์นี้ด้วย: