तो मेरे पास यह कोड है, अगर मैं return
कथन पर बिंदु तोड़ता हूं तो तत्काल विंडो नीचे दी गई जानकारी को आउटपुट करती है।एक ऑब्जेक्ट एक ही समय में शून्य और शून्य कैसे हो सकता है?
try
{
await connection.OpenAsync();
var obj = await cmd.ExecuteScalarAsync();
return obj != null ? Int32.Parse(obj.ToString()) != 1 : false;
}
catch (Exception ex)
{
Log.Error("An error has occurred checking a customer/product authorization.", ex);
return false;
}
finally
{
connection.Close();
}
संग्रहित प्रक्रिया यहाँ संग्रहीत प्रक्रिया के प्रासंगिक भागों है। @HasAuthTable और @Is Authorized bit
प्रकार के हैं।
SELECT (CASE WHEN @HasAuthTable = 0 THEN 1 ELSE 0 END) | @IsAuthorized AS IsAuthorized
तत्काल खिड़की
obj
0
obj == null
false
obj != null
false
obj == 0
error CS0019: Operator '==' cannot be applied to operands of type 'object' and 'int'
obj != 0
error CS0019: Operator '!=' cannot be applied to operands of type 'object' and 'int'
(int)obj == 0
true
(int)obj != 0
false
obj.GetType().FullName
"System.Int32"
obj.Equals(null)
false
!obj.Equals(null)
true
Object.ReferenceEquals(obj, null)
false
!Object.ReferenceEquals(obj, null)
false
मैं कोशिश की है समाधान के पुनर्निर्माण के लिए कुछ भी नहीं बदला। मैंने विजुअल स्टूडियो को पुनरारंभ करने का भी प्रयास किया है। कोई भाग्य नहीं। क्या यह इरादा व्यवहार है? यह एक बग की तरह लगता है।
प्रक्रिया संग्रहित बदल मैं इसे किसी भी तरह से यह प्रभावित करता है, तो देखने के लिए निम्नलिखित मैच के लिए संग्रहीत प्रक्रिया के उत्पादन को बदलने की कोशिश की। नतीजा मूल रूप से वही है। अपेक्षित गतिशील प्रकार के साथ object
का स्थिर प्रकार, दोनों मान हैं लेकिन obj == null
और obj != null
के लिए अभी भी लौट रहे हैं।
SELECT CAST(((CASE WHEN @HasAuthTable = 0 THEN 1 ELSE 0 END) | @IsAuthorized) AS BIT) AS IsAuthorized
संबंधित तत्काल खिड़की
obj
false
obj != null
false
obj == null
false
obj.GetType().FullName
"System.Boolean"
की संभावित डुप्लिकेट [बराबर नहीं DBNull DBNull कैसे] (http://stackoverflow.com/questions/2060217/how-can-dbnull-not-equal-dbnull) – Eris
@Eris यदि मान 'DBNull था। मूल्य' फिर 'obj'' 0' और 'obj! = Null' को हल नहीं करेगा 'सत्य'' false' नहीं होगा। – Servy
ओबीजे के प्रकार का निरीक्षण करने के लिए डीबगर का उपयोग करें। – Ian