2010-08-07 35 views

Trả lời

24

này được gọi là nhà điều hành null-coalescing và nó hoạt động như sau, giả sử a là một nullable int và b là một bình thường int

b = a ?? 1; 

bằng

b = (a != null ? (int)a : 1); 

tương đương với

if(a != null) 
    b = (int)a; 
else 
    b = 1; 

Do đó

public NameValueCollection Metadata 
{ 
    get { return metadata ?? (metadata = new NameValueCollection()); } 
} 

mở rộng nên trông giống như một cái gì đó như thế này

public NameValueCollection Metadata 
{ 
    get 
    { 
     if(metadata == null) 
      return (metadata = new NameValueCollection()); 
     else 
      return metadata; 
    } 
} 

đó là một số loại của một mô hình singleton lót, bởi vì lợi nhuận getter siêu dữ liệu (một đối tượng NameValueCollection được khởi tạo) mỗi khi được yêu cầu, mong đợi lần đầu tiên nó không có giá trị tại thời điểm đó, vì vậy nó khởi tạo nó và sau đó trả lại. Đây là chủ đề nhưng lưu ý rằng cách tiếp cận này đối với mẫu đơn không phải là chủ đề an toàn.

0

Đây là toán tử kết hợp, nó sẽ kiểm tra giá trị rỗng.

statement ?? fallback nếu câu lệnh đánh giá là null, fallback được sử dụng. Xem msdn.

-1

?? là null coalescing hành

đọc về nó ở đây: link text

+0

downvote vì không có lời giải thích. – problemofficer

4

?? Operator (C# Reference)

Các ?? toán tử được gọi là toán tử kết hợp rỗng và được sử dụng để xác định giá trị mặc định cho các loại giá trị có thể loại có thể vô hiệu cũng như các loại tham chiếu . Nó trả về toán hạng bên trái nếu nó không phải là rỗng; nếu không, nó sẽ trả về toán hạng đúng.

dụ của bạn có thể được viết lại như sau:

public NameValueCollection Metadata 
    { 
    get { 
      if (metadata == null) 
       metadata = new NameValueCollection(); 

      return metadata; 
     } 
    } 
0

?? toán tử được gọi là toán tử kết hợp null và được sử dụng để định nghĩa một giá trị mặc định cho một kiểu giá trị nullable cũng như các kiểu tham chiếu. Nó trả về toán hạng bên trái nếu nó không phải là null; nếu không nó sẽ trả về toán hạng bên phải.

http://msdn.microsoft.com/en-us/library/ms173224.aspx

2

Từ MSDN: http://msdn.microsoft.com/en-us/library/ms173224.aspx

Một loại nullable có thể chứa một giá trị, hoặc nó có thể được xác định. Các ?? toán tử xác định giá trị mặc định được trả về khi một kiểu nullable được gán cho một kiểu không nullable. Nếu bạn cố gắng chỉ định một loại giá trị nullable cho một loại giá trị không nullable mà không cần sử dụng ?? điều hành, bạn sẽ tạo ra một lỗi biên dịch thời gian. Nếu bạn sử dụng một diễn viên, và loại giá trị nullable hiện không xác định, một ngoại lệ InvalidOperationException sẽ được ném.

class NullCoalesce 
{ 
static int? GetNullableInt() 
{ 
    return null; 
} 

static string GetStringValue() 
{ 
    return null; 
} 

static void Main() 
{ 
    // ?? operator example. 
    int? x = null; 

    // y = x, unless x is null, in which case y = -1. 
    int y = x ?? -1; 

    // Assign i to return value of method, unless 
    // return value is null, in which case assign 
    // default value of int to i. 
    int i = GetNullableInt() ?? default(int); 

    string s = GetStringValue(); 
    // ?? also works with reference types. 
    // Display contents of s, unless s is null, 
    // in which case display "Unspecified". 
    Console.WriteLine(s ?? "Unspecified"); 
} 

}

+0

Nếu bạn định báo giá MSDN, vui lòng cung cấp liên kết. – strager

1

này được sử dụng để thay thế giá trị mặc định trong trường hợp biến NULL.

X = (if Y is not null return Y) ?? (else return DEFAULT) 

đọc thảo luận chi tiết tại How useful is C#'s ?? operator?

Các vấn đề liên quan