[英]ASP.NET C# Bool type casting
這段代碼拋出一個錯誤:
bool status1 = (bool)Cache["cache_req_head"];
bool status2 = (bool)Cache["cache_super"];
bool status3 = (bool)Cache["cache_head"];
這是設置緩存變量的方式:
if (checkreqhead == true)
{
Cache["cache_req_head"] = true;
}
else if (checksuper == true)
{
Cache["cache_super"] = true;
}
else if (checkhead == true)
{
Cache["cache_head"] = true;
}
來自PHP
背景,這很尷尬。 錯誤是:
你調用的對象是空的
我敢肯定這確實很簡單,但我可能找不到它。
謝謝大家的幫助:)
“未將對象引用設置為對象的實例”是c#語言,表示“您使用null
值執行了一些愚蠢的操作”
如果緩存為空,則需要先檢查
bool status1 = (bool)Cache["cache_req_head"];
應該
bool status1 = false;
if (Cache["cache_req_head"] != null)
{
status1 = (bool)Cache["cache_req_head"];
}
這是由於c#中的值類型(例如bool,int等)不能為null所造成的。 有一個包裝, Nullable<T>
和速記T?
如果要允許值類型的空值,可以使用該選項。
您可以將價值投給bool?
因為那允許null
。
bool? status1 = (bool?)Cache["cache_req_head"];
然后,您可以檢查status1 == null
或status1.HasValue
,以獲取實際的bool值,您需要使用status1.Value
進行挑選。 如果在status1 == null
選擇status1.Value
,則將獲得運行時異常,就像剛剛得到的異常一樣。
實際上,檢查Cache
是否存在值的最佳方法是執行以下操作:
//string is used as an example; you should put the type you expect
string variable = Cache["KEY"] as string;
if(variable!=null)
{
// do something
}
為什么要做if(Cache["KEY"]!=null) myVariable=Cache["Key"];
之所以不安全,是因為在您有機會將Cache["Key"]
存儲的對象分配給myVariable
,您最終認為myVariable持有一個非null值,因此該對象可能已從Cache
刪除。
您顯然一次只能設置一個緩存條目。 因此,除非您僅將1個變量設置為true來運行“ setter”代碼3次,否則您總是會返回null。 null
不會轉換為bool
因為它是一種值類型。 嘗試使用bool?
由於Cache []返回一個對象,如果未設置,則該對象為null,因此您將嘗試將null轉換為布爾值。
您必須檢查該鍵是否首先存在,或者必須將每個鍵默認設置為“ false”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.