? Bạn muốn kiểm tra kiểu của một đối tượng.
Sử dụng phương thức thừa kế Object.GetType để thu lấy Type cho đối tượng này. Trong vài trường hợp, bạn cũng có thể sử dụng toán tử is và as để kiểm tra kiểu của một đối tượng.
Tất cả các kiểu dữ liệu đều thừa kế phương thức GetType từ lớp cơ sở Object. Như đã được thảo luận trong mục 3.10, phương thức này trả về một tham chiếu Type mô tả kiểu của đối tượng. Bộ thực thi duy trì một đối tượng Type cho mỗi kiểu được nạp và tất cả các tham chiếu cho kiểu này cùng chỉ đến đối tượng này. Điều này nghĩa là bạn có thể so sánh hai tham chiếu kiểu một cách hiệu quả. Ví dụ dưới đây trình bày cách kiểm tra một đối tượng có phải là System.IO.StringReader hay không:
Visual C# Code:
  1. // Tạo một StringReader để thử nghiệm.
  2. Object someObject = new StringReader("This is a StringReader");
  3.  
  4. // Kiểm tra xem someObject có phải là một StringReader hay không
  5. // bằng cách thu lấy và so sánh tham chiếu Type (sử dụng toán tử typeof).
  6. if (typeof(System.IO.StringReader) == someObject.GetType())
  7. {
  8.     // Làm gì đó.
  9.     §
  10. }
C#
cung cấp toán tử is để thực hiện nhanh việc kiểm tra như trên. Ngoài ra, is sẽ trả về true nếu đối tượng cần kiểm tra dẫn xuất từ lớp được chỉ định. Đoạn mã dưới đây kiểm tra xem someObject là một thể hiện của System.IO.TextReader, hay một lớp dẫn xuất từ TextReader (như StringReader):
Visual C# Code:
  1. // Kiểm tra xem someObject là TextReader,
  2. // hay dẫn xuất từ TextReader bằng toán tử is.
  3. if (someObject is System.IO.TextReader)
  4. {
  5.     // Làm gì đó.
  6.     §
  7. }
Cả hai cách này đều đòi hỏi kiểu dùng với toán tử typeof và is phải là kiểu đã biết và khả phân giải lúc biên dịch. Một cách khác linh hoạt hơn (nhưng chậm hơn) là sử dụng phương thức Type.GetType để trả về một tham chiếu Type cho kiểu được chỉ định. Tham chiếu Type không được phân giải cho đến khi thực thi, việc này ảnh hưởng đến hiệu năng, nhưng cho phép bạn thay đổi phép so sánh kiểu lúc thực thi dựa trên giá trị của một chuỗi. Phương thức IsType dưới đây sẽ trả về true nếu đối tượng thuộc kiểu được chỉ định và sử dụng phương thức Type.IsSubclassOf để kiểm tra đối tượng này có phải là một lớp con của kiểu được chỉ định hay không.
Cuối cùng, bạn có thể sử dụng toán tử as để ép bất kỳ đối tượng nào sang kiểu được chỉ định. Nếu đối tượng không thể bị ép sang kiểu được chỉ định, toán tử as sẽ trả về null. Điều này cho phép bạn thực hiện các phép ép kiểu an toàn (safe cast), nhưng kiểu được so sánh phải là khả phân giải lúc thực thi. Dưới đây là một ví dụ:
Visual C# Code:
  1. // Sử dụng toán tử as để thực hiện một phép ép kiểu an toàn.
  2. StringReader reader = someObject as System.IO.StringReader;
  3. if (reader != null) {
  4.     // Làm gì đó.
  5.     §
  6. }
Phương thức tĩnh GetUnderlyingType của lớp System.Enum cho phép bạn thu lấy kiểu thực sự của một kiểu liệt kê.

Trích từ "Các giải Pháp lập trình C#"