• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Tìm hiểu toán tử ?? trong C#

Các mẹo vặt linh tinh không thuộc các nhóm trên

Điều hành viên: tungcan5diop, QUANITGROBEST

neverland87
Guru
Guru
Bài viết: 490
Ngày tham gia: T.Bảy 26/05/2007 4:31 pm
Been thanked: 8 time

Tìm hiểu toán tử ?? trong C#

Gửi bàigửi bởi neverland87 » T.Hai 16/06/2008 10:15 pm

Như chúng ta đã biết, kể từ .NET v2.0, C# đã hỗ trợ kiểu dữ liệu có khả năng null, chẳng hạn, nếu trong phiên bản v1.1, bạn gõ lệnh:

Mã: Chọn hết

  1. int a = null;


thì sẽ bị báo lỗi. Vì sao? vì int là kiểu giá trị, và nó không thể khởi gán với giá trị null như kiểu tham chiếu. Nhưng đến phiên bản .NET FRAMEWORK 2.0, bạn hoàn toàn làm được điều đó, với lệnh sau:

Mã: Chọn hết

  1. int? a = null;


Hoặc dùng dạng Generic: NullAble<T> với T là 1 kiểu dữ liệu thuộc kiểu trị. Ví dụ:

Mã: Chọn hết

  1. Nullable<int> a = null;


Như thế, khi lập trình, bạn sẽ gặp phải 1 lỗi có kịch bản như thế này: viết chương trình kết nối CSDL, lấy ra số dòng dữ liệu nào đó, gán vào 1 biến int nào đó. Nếu nó là số thì không có vấn đề gì, nhưng nếu là NULL thì sao?? Tức khắc báo lỗi! Tất nhiên, kịch bản này được nghĩ ra để bạn hiểu được vấn đề va cũng để giới thiệu toán tử ?? trong C#. Thử xem ví dụ minh họa được trích từ MSDN như sau nhá:

Mã: Chọn hết

  1.  
  2. // nullable_type_operator.cs
  3. using System;
  4. class MainClass
  5. {
  6.     static int? GetNullableInt()
  7.     {
  8.         return null;
  9.     }
  10.  
  11.     static string GetStringValue()
  12.     {
  13.         return null;
  14.     }
  15.  
  16.     static void Main()
  17.     {
  18.         // ?? operator example.
  19.         int? x = null;
  20.  
  21.         // y = x, unless x is null, in which case y = -1.
  22.         int y = x ?? -1;
  23.  
  24.         // Assign i to return value of method, unless
  25.         // return value is null, in which case assign
  26.         // default value of int to i.
  27.         int i = GetNullableInt() ?? default(int);
  28.  
  29.         string s = GetStringValue();
  30.         // ?? also works with reference types.
  31.         // Display contents of s, unless s is null,
  32.         // in which case display "Unspecified".
  33.         Console.WriteLine(s ?? "Unspecified");
  34.     }
  35. }


Lúc đầu, cho biết x là kiểu có khả năng null và gán nó = null luôn, sau đó với lệnh:

Mã: Chọn hết

  1. int y = x ?? -1;


có thể diễn giải như thế này "nếu x == null thì gán giá trị mặc định là -1 vào y cho tui, còn nếu khác null thì....vô tư mà gán trị của x"

Tương tự với lệnh:

Mã: Chọn hết

  1. int i = GetNullableInt() ?? default(int);


Phương thức GetNullableInt() chắc chắn trả về null, như thế biến i sẽ nhận giá trị mặc định của kiểu int là số 0.
Và 1 lời cuối: toán tử ?? vẫn làm việc với dữ liệu kiểu tham chiếu (như ví dụ trên là biến s đó)


SIMPLY THE BEST - ĐƠN GIẢN LÀ TỐT NHẤT

Quay về “[.NET] Mẹo vặt khác”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.2 khách