9

Old WayLàm cách nào để sử dụng toán tử Nullable với toán tử điều kiện Null?

int? myFavoriteNumber = 42; 
int total = 0; 
if (myfavoriteNumber.HasValue) 
    total += myFavoriteNumber.Value *2; 

cách mới?

int? myFavoriteNumber = 42; 
total += myFavoriteNumber?.Value *2; //fails 
+2

Có gì sai với 'int total = (myfavoriteNumber.HasValue)? myFavoriteNumber.Value * 2: 0; '? Vẫn còn một dòng, và dễ đọc hơn so với đề xuất "cách mới" của bạn –

+0

@ShadowWizard Tôi giả định rằng ông có thể muốn sử dụng chức năng này nhiều lần do đó việc sử dụng + = để ông có thể giữ một tổng chạy? Tôi chỉ đang đoán thôi. Tôi vẫn thích bình luận của bạn khi tôi đồng ý với bạn. –

+0

@PrimeByDesign Tôi sẽ đi với '??', như trong [this] (https://stackoverflow.com/a/35970536/111794) câu trả lời. –

Trả lời

4

Toán tử truyền bá null ?. sẽ như nó nói, tuyên truyền giá trị null. Trong trường hợp int? .Value này là không thể vì loại Value, int, không thể null (nếu nó có thể, hoạt động sẽ trở thành null * 2, điều đó có nghĩa là gì?). Vì vậy, 'Old Way' vẫn là cách hiện tại để làm điều này.

+0

_điều đó có nghĩa là gì? _ Cũng giống như một sang một bên, thường là bất kỳ số nào được nhân với NULL trả về NULL. Đó là cách hoạt động của SQL bình thường, ví dụ. NULL thường có nghĩa là "Tôi không biết giá trị". Hãy tưởng tượng ví dụ này: Tôi nhân 5 quả táo với giá $ NULL cho mỗi quả táo. Vì vậy, tôi không biết chi phí của một quả táo. Hậu quả là _I không thể biết_ tổng chi phí, do đó kết quả là NULL. –

3

Hãy thử điều này:

int? myFavoriteNumber = 42; 
total += (myFavoriteNumber??0) *2; 

Biểu thức (myFavoriteNumber?? 0) trả về 0 trong trường hợp myFavoriteNumber là null.

3

Tôi nghĩ rằng bạn đã hiểu nhầm việc sử dụng null toán tử điều kiện. Nó được sử dụng để đoản mạch một chuỗi ifs đến null, khi một trong các bước mang lại null.

Giống như vậy:

userCompanyName = user?.Company?.Name; 

Xin lưu ý rằng userCompanyName sẽ chứa null nếu user hoặc user.Companynull. Trong ví dụ total của bạn không thể chấp nhận null, vì vậy, đó là nhiều hơn về việc sử dụng ?? hơn bất cứ điều gì khác:

total = (myFavoriteNumber ?? 0) * 2; 
0

Hãy thử điều này

int? myFavoriteNumber = 42; 
total += (myFavoriteNumber.Value!=null)? myFavoriteNumber.Value*2 : 0; 
Các vấn đề liên quan