2011-02-04 10 views
10

मैं उपयोग कर रहा हूँ सी #कैसे सी # में पूर्णांक प्रकार के सत्र चर कन्वर्ट करने के लिए

मैं कि मेरे लॉगिन प्रयास से अधिक 3 अधिक नहीं है की जाँच करने के कोशिश कर रहा हूँ, मैं शर्त नीचे

if (((int)Session["LoginAttempt"]) != 3) 
{ 
} 

लॉग इन में से मतलब में विफल रहा है हालत मैं नीचे की तरह वेतन वृद्धि कर रहा हूँ:

Session["LoginAttempt"] = ((int) Session["LoginAttempt"]) + 1; 

लेकिन यह मुझे त्रुटि दे रहा है "ऑब्जेक्ट संदर्भ एक वस्तु का एक उदाहरण के लिए सेट नहीं।"

कृपया सुझाव है!

उत्तर

16

क्षमा दोस्तों,

मैं सिर्फ पूर्णांक कोड परिवर्तित

((int) Session["LoginAttempt"]) 

से

Convert.ToInt32(Session["LoginAttempt"]) + 1; 

को बदल दिया है और अब यह मेरे लिए ठीक काम कर रहा है, कृपया के मामले में करने का सुझाव इसमें कोई समस्या है।

धन्यवाद!

4

आप को देखने के लिए परीक्षण की आवश्यकता Session चर मौजूद रहने पर इससे पहले कि आप इसका इस्तेमाल करते हैं और यह करने के लिए प्रदान कर सकते हैं।

यहाँ आप एक वेतन वृद्धि कर रहे हैं:

Session["LoginAttempt"] = ((int) Session["LoginAttempt"]) + 1;

लेकिन, अगर Session["LoginAttempt"] मौजूद नहीं है, यही आपकी त्रुटि की व्याख्या करेगा। बढ़ने से पहले एक त्वरित null परीक्षण इसे हल करना चाहिए।

if (Session["LoginAttempt"] != null) 
    Session["LoginAttempt"] = ((int)Session["LoginAttempt"]) + 1; 
0

आप इसे आरंभ करने से पहले आप को पुनः प्राप्त करने के लिए इसे बढ़ाने के लिए प्रयास करें और/या कुछ बिंदु पर कर रहे हैं?

0
भागों में अपने nontrivial कोड विभाजित

:

int sessionLogicAttempt = (int)Session["LoginAttempt"]; 
int someValue = sessionLogicAttempt + 1; 
Session["LoginAttempt"] = someValue; 

इसके अलावा, मूल्यों आप मानते हैं की जांच करने के दावे जोड़ें।

1

यह करना होगा कि पहली बार जब आप यह निर्धारित करने के लिए यदि आपने पहले यह initialised नहीं किया है की कोशिश करो। ऐसा करें:

Session["LoginAttempt"] = ((int?)Session["LoginAttempt"] ?? 0) + 1; 

यह एक व्यर्थ int को सत्र चर Session["LoginAttempt"] में परिवर्तित कर देंगे (एक int कि null हो सकता है) ?? 0 एक मूल्य प्रदान करता है:

if (Session["LoginAttempt"] == null) 
    Session["LoginAttempt"] = 1; 
else 
    ((int)Session["LoginAttempt"]) += 1; 
0
//read 
object attemptObj = Session["LoginAttempt"] 
int attempt = 0; 
if (attemptObj != null) attempt = (int)attemptObj ; 

////write 
Session["LoginAttempt"] = attempt++; 
7

जादू कोड का प्रयास करें 0 अगर यह शून्य है, तो गणना सफल हो जाती है।

Session["LoginAttempt"] अशक्त हो सकता है अगर यह पहले से प्रारंभ नहीं किया गया है।

0

यह सुनिश्चित करने का प्रयास करें कि संभवतः एक शून्य मान जो कुछ न डालें।

int i = Session["val"] == null ? 0 : (int)Session["val"]; 

इस सकता है आप के साथ-साथ कुछ अन्य प्रोग्रामर अपने "वैल" सत्र का उपयोग करता है और वहाँ बहुत एक गैर पूर्णांक मूल्य डाल अगर गंदगी हालांकि।

 int y = 0; 
     if (int.TryParse(Session["val"] == null ? string.Empty : Session["val"].ToString(), out y)) 
     { 
      // got your int value 
     } 
     else 
     { 
      // no int value in session val 
     } 
3

एक संपत्ति और के रूप में LoginAttempt मूल्य क्यों संपुटित नहीं एक मूल्य ऑटो आवंटित:

protected int LoginAttempt 
{ 
    get 
    { 
     if (Session["LoginAttempt"] == null) 
     { 
      Session["LoginAttempt"] = 1; 
     } 
     return Convert.ToInt32(Session["LoginAttempt"].ToString()); 
    } 
    set 
    { 
     Session["LoginAttempt"] = value; 
    } 
} 

ताकि समारोह के मुख्य शरीर अधिक पठनीय है:

if (LoginAttempt < 3) 
{ 
} 
संबंधित मुद्दे

 संबंधित मुद्दे