2012-11-07 21 views
6

enter image description hereCodeContracts: झूठी चेतावनी

उपरोक्त छवि में "संभवत: एक अशक्त संदर्भ बॉक्स से निकालना", आप कोड संविदा से एक चेतावनी देख सकते हैं। मुझे नहीं लगता कि यह वैध है, क्योंकि this कभी भी null नहीं हो सकता है।

क्या यह एक बग है या क्या मुझे कुछ याद आ रहा है?

: -:

public class NHibernateIQueryableQueryBase<TEntity, TQuery, TQueryInterface> 
    : IQuery<TEntity>, IFluentQueryInterface<TEntity, TQueryInterface> 
    where TQuery : NHibernateIQueryableQueryBase<TEntity, TQuery, 
               TQueryInterface>, 
        TQueryInterface 
    where TQueryInterface : IQuery<TEntity> 

अद्यतन: लाइन return result; पर
निम्न के संपत्ति को बदलने अभी भी चेतावनी से पता चलता


यह गुण निम्नलिखित वर्ग का एक सदस्य है

public TQueryInterface And 
{ 
    get 
    { 
     var result = this as TQuery; 
     return result; 
    } 
} 
+0

अंधेरे कारण में पूरा शॉट मैं एक नोब हूं और मुझे यकीन है कि आपने इसके बारे में सोचा है लेकिन TQuery (यह) वापस नहीं लौटा सकता है? –

+0

कृपया हमें अपनी तरह की घोषणा दिखाएं। उन सामान्य मानकों पर आपके पास क्या बाधाएं हैं? – SLaks

+0

@ जेसे कैटर: नहीं। इसका परिणाम अमान्य कैस्ट अपवाद हो सकता है, इसलिए मैं कहूंगा कि चेतावनी का कारण नहीं है। –

उत्तर

1

विश्लेषण यह नहीं समझता कि thisTQuery को लागू करने की गारंटी है।
इसलिए, यह आपको चेतावनी है कि आप इंटरफ़ेस प्रकार करने के लिए एक null संदर्भ लेने खत्म हो सकता है, और एक struct कि कि इंटरफ़ेस को लागू करता है के रूप में यह लौटने:

आप TQueryInterface पैरामीटर की कमी के : class जोड़ने की जरूरत है।

0

this question के आधार पर, मैं कहूंगा कि आपको एस अगर कास्ट विफल रहता है तो क्या होता है।

return this as TQuery आज़माएं क्योंकि as ऑपरेटर कास्ट विफल होने पर शून्य वापस आ जाएगा, जबकि स्पष्ट कलाकार एक त्रुटि फेंक देगा।

+0

कृपया मेरा अपडेट देखें, यह मदद नहीं करता है। –