2012-07-23 15 views
11

bất cứ ai có thể nghĩ ra mô hình Resharper tốt sẽ phát hiện các lỗi sau:mẫu Resharper để phát hiện số học với các loại nullable

decimal? x = null; 

decimal? y = 6M; 

var total = x + y; 

Console.WriteLine(total); // Result is null 

tôi đã cố gắng tạo ra một mô hình nhưng tôi không thể làm việc ra làm thế nào để nhanh chóng xử lý tất cả các loại số học (ví dụ: +, -, * etc), và bất kỳ loại null nào (e.g. Nullable<int>, Nullable<decimal>, Nullable<double> etc). Ngoài ra, tôi không thể xử lý giao hoán (ví dụ: nó sẽ phát hiện x + y cũng như y + x).

Lưu ý rằng tôi không nhất thiết cần phát hiện xem có hay không x thực sự là rỗng: chỉ có hay không đó là một loại không có giá trị. Tôi muốn buộc các nhà phát triển viết: x.Value + y.Value.

+0

erm nullable chỉ là một lớp chung. Nullable Cấu trúc lý do tại sao không chỉ làm mẫu này phức tạp: "Nullable " – Nahum

+0

Và không kiểm tra mẫu 'x + y', nhưng tìm kiếm' Nullable 'đã được gán chắc chắn với' null' và không có bất kỳ '+', '-',' * ','/','^',' * ',' ~ ',' <<','>> 'ở bên trái hoặc bên phải của nó (hoặc' - = ' , '+ =', ... ở bên trái). – SimpleVar

+0

@Nahum Nó không hoạt động. – cbp

Trả lời

3

Đây không phải là câu trả lời đầy đủ, nhưng đây là câu trả lời hay nhất mà tôi đã đưa ra cho đến giờ.

Các mô hình là:

$obj$ + $nullableObj$ 

obj là một "biểu hiện của loại System.Object hoặc một trong các loại có nguồn gốc của nó nullableObj là một" biểu hiện của loại System.Nullable ". (Lưu ý rằng bạn không muốn nullableObj để bao gồm các loại có nguồn gốc).

Đây không phải là một giải pháp rất tốt vì mô hình không xử lý giao hoán, vì vậy bạn sẽ cần phải sao chép và dán nó và đảo ngược các biểu thức:

$nullableObj$ + $obj$ 

Ngoài ra, mô hình này chỉ điều khiển số thập phân, vì vậy bạn sẽ cần phải sao chép và dán nó đối với từng loại mà bạn quan tâm (có, đó là khả năng rất nhiều mẫu).

Một tin vui: Biểu tượng + xử lý cả phép cộng và trừ, do đó bạn không cần phải lo lắng về phép trừ.

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