[英]How can an object be null and not null at the same time?
因此,我有這段代碼,如果我在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和@IsAuthorized的類型為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
我嘗試過重建解決方案沒有任何改變。 我也嘗試過重新啟動Visual Studio。 沒運氣。 這是預期的行為嗎? 好像是個錯誤。
更改存儲過程我嘗試更改存儲過程的輸出以匹配以下內容,以查看它是否以任何方式對其產生影響。 結果基本相同。 具有預期動態類型的object
的靜態類型,都具有值,但對於obj == null
和obj != null
仍返回false
。
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"
var obj = await cmd.ExecuteScalarAsync();
在做拳擊 。
如果將0裝箱,則立即窗口顯示不正確的值。 它必須是“即時窗口”中的錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.