Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Cấu trúc Int16 Struct trong C#

Giới thiệu

Int16 Struct đại diện cho số nguyên 16-bit có dấu (signed 16-bit integer) với giá trị từ -32,768 đến 32,767. Trong C#, short là alias của Int16.

Các trường (Fields) của Int16

STTTrường & Mô tả
1 MaxValue − Giá trị lớn nhất của Int16: 32,767 (0x7FFF). Trường hằng (const).
2 MinValue − Giá trị nhỏ nhất của Int16: -32,768 (0x8000). Trường hằng (const).

Các phương thức chính

STTPhương thức & Mô tả
1CompareTo(Int16) − So sánh với Int16 khác.
2CompareTo(Object) − So sánh với object.
3Equals(Int16) − Kiểm tra bằng giá trị Int16.
4Equals(Object) − Kiểm tra bằng object.
5GetHashCode() − Trả về hash code (thường là giá trị int của short).
6GetTypeCode() − Trả về TypeCode.Int16 (giá trị 7).
7Parse(String) − Chuyển chuỗi thành Int16.
8TryParse(String, out Int16) − Thử parse an toàn, khuyên dùng.
9ToString() − Chuyển thành chuỗi, hỗ trợ format.

Ví dụ: Int16.GetHashCode()

using System;

public class Demo {
    public static void Main() {
        short val1 = 20;
        short val2 = 25;

        Console.WriteLine("Value1 = " + val1);
        Console.WriteLine("Value2 = " + val2);
        Console.WriteLine("HashCode cho value1 = " + val1.GetHashCode());
        Console.WriteLine("HashCode cho value2 = " + val2.GetHashCode());
        Console.WriteLine("Chúng có bằng nhau? = " + (val1.Equals(val2)));
    }
}

Đầu ra

Value1 = 20
Value2 = 25
HashCode cho value1 = 1310740
HashCode cho value2 = 1638425
Chúng có bằng nhau? = False

Ví dụ: Int16.GetHashCode() với MaxValue

using System;

public class Demo {
    public static void Main() {
        short val1 = 0;
        short val2 = Int16.MaxValue; // 32767

        Console.WriteLine("Value1 = " + val1);
        Console.WriteLine("Value2 = " + val2);
        Console.WriteLine("HashCode cho value1 = " + val1.GetHashCode());
        Console.WriteLine("HashCode cho value2 = " + val2.GetHashCode());
        Console.WriteLine("Chúng có bằng nhau? = " + (val1.Equals(val2)));
    }
}

Đầu ra

Value1 = 0
Value2 = 32767
HashCode cho value1 = 0
HashCode cho value2 = 2147450879
Chúng có bằng nhau? = False

Ví dụ: Int16.GetTypeCode()

using System;

public class Demo {
    public static void Main() {
        short val1 = 0;
        short val2 = Int16.MaxValue;

        Console.WriteLine("Value1 = " + val1);
        Console.WriteLine("Value2 = " + val2);
        Console.WriteLine("HashCode cho value1 = " + val1.GetHashCode());
        Console.WriteLine("HashCode cho value2 = " + val2.GetHashCode());
        Console.WriteLine("Chúng có bằng nhau? = " + (val1.Equals(val2)));

        TypeCode type1 = val1.GetTypeCode();
        TypeCode type2 = val2.GetTypeCode();
        Console.WriteLine("TypeCode cho val1 = " + type1);
        Console.WriteLine("TypeCode cho val2 = " + type2);
    }
}

Đầu ra

Value1 = 0
Value2 = 32767
HashCode cho value1 = 0
HashCode cho value2 = 2147450879
Chúng có bằng nhau? = False
TypeCode cho val1 = Int16
TypeCode cho val2 = Int16

Ví dụ GetTypeCode() khác

using System;

public class Demo {
    public static void Main() {
        short val1 = 23;
        short val2 = 0;

        Console.WriteLine("Value1 = " + val1);
        Console.WriteLine("Value2 = " + val2);
        Console.WriteLine("HashCode cho value1 = " + val1.GetHashCode());
        Console.WriteLine("HashCode cho value2 = " + val2.GetHashCode());
        Console.WriteLine("Chúng có bằng nhau? = " + (val1.Equals(val2)));

        TypeCode type1 = val1.GetTypeCode();
        TypeCode type2 = val2.GetTypeCode();
        Console.WriteLine("TypeCode cho val1 = " + type1);
        Console.WriteLine("TypeCode cho val2 = " + type2);
    }
}

Đầu ra

Value1 = 23
Value2 = 0
HashCode cho value1 = 1507351
HashCode cho value2 = 0
Chúng có bằng nhau? = False
TypeCode cho val1 = Int16
TypeCode cho val2 = Int16

Lưu ý quan trọng

  • Int16 là value type (struct), lưu trên stack.
  • Dùng TryParse thay Parse để tránh exception.
  • Overflow: phép tính vượt quá phạm vi [-32768, 32767] sẽ bị truncate (mặc định) hoặc ném exception (trong checked context).
  • Hash code của short không đơn giản là giá trị int (khác với sbyte), do thuật toán băm nội bộ.