क्योंकि मेरा (यूनिट-) परीक्षण कवरेज अभी भी काफी कम है, दुर्भाग्यवश, मुझे बहुत सारी त्रुटियों को कठिन तरीके से ढूंढना है। इसलिए, रिफैक्टरिंग के दौरान, मैं सी # कंपाइलर की प्रकार की जांच पर भरोसा करता हूं।टाइप-सेफ इक्विल्स()
आज, मैंने x.Equals(aThingWrappingOriginalThing)
के साथ एक लाइन खोकर रिफैक्टरिंग के दौरान पेश की गई एक बग तय की। चूंकि यह bool Equals(object T)
है, इसलिए संकलक शिकायत नहीं करता था। हालांकि, 9 0% मैं Equals()
सीधे (बीसीएल के माध्यम से) का उपयोग करता हूं, मैं तर्कसंगत रूप से उसी प्रकार की वस्तुओं की तुलना करना चाहता हूं।
अब मुझे आश्चर्य है कि मैंने कभी ऐसी स्थितिओं (सी # में) के लिए Equals()
के प्रकार-सुरक्षित संस्करण को बढ़ावा देने वाले किसी को क्यों नहीं देखा है। क्या इसके लिए कोई अच्छा अभ्यास है?
public static bool SafeEquals<T>(this T a, T b)
{
if (a == null) return b == null;
return a.Equals(b);
}
public static bool SafeEquals<X>(this IEquatable<X> a, IEquatable<X> b)
{
if (a == null) return b == null;
return a.Equals(b);
}
इन अनुकूलित किया जा सका:
मैं बहुत की तरह, उन comparisions के लिए एक विस्तार विधि का उपयोग करने के लिए परीक्षा रहा हूँ? http://rickyclarkson.blogspot.com/2006/12/making-equalsobject-type-safe.html
यहां विषय पर कुछ पृष्ठभूमि है: http://blogs.msdn.com/b/ericlippert/archive/2009/04/09/double-your-dispatch-double-your-fun.aspx – Vlad