簡體   English   中英

ASP.NET C#Bool類型轉換

[英]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 == nullstatus1.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM