Cả hai kiểm tra kiểu lúc runtime nhưng trả về khác nhau:
is: trả vềbool— đối tượng có tương thích kiểu không. Với pattern matching (C# 7+) còn gán luôn biến đã ép kiểu:
csharp
if (obj is string s) // đúng kiểu → gán s, không cần cast lại
Console.WriteLine(s.Length);- as: thử ép kiểu, thành công trả về đối tượng, thất bại trả về null (không ném exception).
Chỉ dùng được cho reference type và nullable type.
csharp
string? s = obj as string;
if (s != null) { /* ... */ }Khác với cast (T)obj: cast trực tiếp ném InvalidCastException khi sai kiểu. Chọn:
- Cần biết đúng/sai kiểu (và dùng luôn): is + pattern.
- Chấp nhận null khi không khớp: as.
- Chắc chắn đúng kiểu, muốn lỗi nếu sai: cast (T).