2012-07-23 23 views
11

साथ अंकगणित पता लगाने के लिए किसी को भी अच्छा Resharper पैटर्न है कि निम्नलिखित बग की पहचान करेगा के बारे में सोच सकता है:Resharper पैटर्न नल प्रकार

decimal? x = null; 

decimal? y = 6M; 

var total = x + y; 

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

मैं एक पैटर्न बनाने की कोशिश की है, लेकिन मैं बाहर काम नहीं कर सकता है कि कैसे जल्दी से संभाल करने के लिए सभी प्रकार के अंकगणितीय (जैसे +, -, * आदि), और किसी भी शून्य प्रकार (e.g. Nullable<int>, Nullable<decimal>, Nullable<double> etc)। इसके अलावा मैं कम्यूटिटीविटी को संभाल नहीं सकता (उदा। इसे x + y के साथ-साथ वाई + x) का पता लगाना चाहिए।

ध्यान दें कि मुझे यह पता लगाने की आवश्यकता नहीं है कि x वास्तव में शून्य है: बस यह एक शून्य प्रकार है या नहीं। मैं डेवलपर्स को लिखने के लिए मजबूर करना चाहता हूं: x.Value + y.Value।

+0

erm nullable सिर्फ एक सामान्य वर्ग है। Nullable संरचना क्यों नहीं बस पर इस पद्धति thingy बनाने: "Nullable " – Nahum

+0

और एक 'x + y' पैटर्न के लिए जाँच नहीं है, लेकिन एक' Nullable 'कि निश्चित रूप से' null' साथ सौंपा गया है के लिए देखो और इनमें से कोई भी '+', '-',' * ','/','^',' * ',' ~ ',' <<','>> 'या तो बाएं या दाएं (या' - = ' , '+ =', ... इसके बाईं ओर)। – SimpleVar

+0

@Nahum यह काम नहीं करता है। – cbp

उत्तर

3

यह एक पूर्ण उत्तर नहीं है, लेकिन यह अब तक का सबसे अच्छा है।

पैटर्न है:

$obj$ + $nullableObj$ 

obj एक प्रकार System.Nullable की अभिव्यक्ति "इसके व्युत्पन्न प्रकारों में से एक nullableObj एक है प्रकार System.Object की अभिव्यक्ति या" "(ध्यान दें कि आप व्युत्पन्न प्रकारों को शामिल करने के लिए nullableObj नहीं चाहते हैं)

यह बहुत अच्छा समाधान नहीं है क्योंकि पैटर्न नहीं है commutativity संभाल है, तो आप को कॉपी और पेस्ट करें और रिवर्स करने के भाव की आवश्यकता होगी:

$nullableObj$ + $obj$ 

इसके अलावा, इस पद्धति केवल दशमलव संभालती है, तो आप को कॉपी करें और प्रत्येक प्रकार है कि आप में रुचि के लिए यह पेस्ट करना होगा (हाँ, यह संभावित रूप से बहुत सारे पैटर्न हैं)।

अच्छी खबर का एक टुकड़ा: + प्रतीक दोनों जोड़ और घटाव को संभालता है, इसलिए आपको घटाव के बारे में चिंता करने की आवश्यकता नहीं है।