क्यों Resharper "के रूप में" करने के लिए "है" पसंद करता है?


13

जब मैं इस तरह कोड लिखता हूं, जहां obj एक स्थानीय चर है:

if (obj is IMyInterface)
{
   var result = (IMyInterface)obj;
   // ....
}

Resharper इसे इस तरह कोड में बदलने की पेशकश करता है:

var result = obj as IMyInterface;
if (result != null)
{
   // ...
}

मैं पूर्व को पसंद करता हूं, क्योंकि यह आकस्मिक अशक्त संदर्भ अपवादों के लिए कोई अवसर प्रदान नहीं करता है। अन्य रूप को प्राथमिकता देने के क्या कारण हैं?

Resharper इसकी सलाह क्यों देता है?

जवाबों:


25

सी # में कास्टिंग के बारे में सामान्य प्रश्न के लिए सबसे पहले जॉन स्कीट के उत्तर को देखें:

ऐसा न करें:

if (randomObject is TargetType)
{
    TargetType foo = (TargetType) randomObject;
    // Do something with foo
}

न केवल यह दो बार जाँच कर रहा है, लेकिन यह विभिन्न चीजों की जाँच कर सकता है, अगर randomObject एक स्थानीय चर के बजाय एक क्षेत्र है। "यदि" पास करना संभव है, लेकिन फिर असफल होना है, अगर एक और धागा दोनों के बीच randomObject के मान को बदलता है।

(...)

यदि randomObject एक टारगेट टाइप का उदाहरण हो सकता है और टारगेट टाइप एक संदर्भ प्रकार है, तो इस तरह कोड का उपयोग करें:

TargetType convertedRandomObject = randomObject as TargetType;
if (convertedRandomObject != null)
{
    // Do stuff with convertedRandomObject
}

फिर समान विषय देखें:


1
+1 इस विषय पर एरिक लिपर्ट का ब्लॉग पोस्ट भी देखें ।
ब्रायन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.