亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

使用checked語句防止數(shù)據(jù)溢出的解決方法

 更新時間:2013年05月18日 09:33:12   作者:  
本篇文章是對用checked語句防止數(shù)據(jù)溢出的解決方法進行了詳細的分析介紹,需要的朋友參考下
在C#中有一個關(guān)鍵字checked,它用來判斷當(dāng)前上下文中的數(shù)值運算和數(shù)值轉(zhuǎn)換是否會溢出。如是是常量溢出,那在編譯時就能發(fā)現(xiàn);如果是變量溢出,那在運行時會拋出OverflowException。
數(shù)值運算有:++   —   - (unary)   +   -   *   /

有了這個就不用擔(dān)心數(shù)據(jù)溢出了。

checked
checked 有兩種使用方法:
1.作為操作符來使用
復(fù)制代碼 代碼如下:

int a = int.MinValue;
int c = checked(a--);

執(zhí)行的時候會拋出異常:

image

2.檢查一大塊代碼:
這樣子會對里面所有的代碼都做檢查
復(fù)制代碼 代碼如下:

checked
{
    int a = int.MinValue;
    int c = a--;
}

如下圖:

image

unchecked
和checked對應(yīng),還有一個unchecked關(guān)鍵字,用來取消檢查。
也是兩種使用;
1.作為運算符:

復(fù)制代碼 代碼如下:

int a = int.MinValue;
int c = unchecked(a--);

這樣子就不會拋異常了

image

2.檢查一大塊代碼

復(fù)制代碼 代碼如下:

unchecked
{
    int a = int.MinValue;
    int c = a--;
}

也不拋異常:

image

/checked 和/checked-
如果代碼里總是要寫這么多checked語句是不是很煩?如果能有一個編譯參數(shù)就好,只有設(shè)置了就都會檢查。微軟也想到了這個,它提供了一個/checked 參數(shù)來做,也提供了一個/checked-來取消。
•溢出檢查 /checked,也可以是/checked+
•溢出不檢查 /checked-
當(dāng)然,你想取消所有的檢查也是可以的,命令行參數(shù)是/checked-
復(fù)制代碼 代碼如下:

csc t2.cs /checked

其中csc是編譯器csc.exe , t2.cs 是被編譯的代碼文件。
我想很多人是用Visual Studio吧。VS里也是可以設(shè)置的。
步驟如下,我以VS2010為例,(VS2005,2008差不多)
1。在工程上點右鍵,選擇菜單Properties

image

2。點擊“Build”,再點擊“Advanced”

image

3。在打開的對話框中,把“Check for arithmetic overflow/underflow”打上勾

image

幾個注意
1.checked語句只對當(dāng)前上下文中的代碼有效,即不對調(diào)用的函數(shù)內(nèi)部做檢查。

復(fù)制代碼 代碼如下:

static void Main(string[] args)
{
    checked
    {
        TestFun();
    }
}
static void TestFun()
{
    int a = int.MinValue;
    int c = a--;
}

這段代碼中。不會跑異常,因為checked關(guān)鍵字沒有影響到TestFun內(nèi)部。如果需要這么做的話,要么在TestFun內(nèi)部加checked關(guān)鍵字,要么打開全局開關(guān)(加編譯參數(shù)/checked或者VS中設(shè)置)。
2.checked,unchecked關(guān)鍵字不檢查左移和右移是否溢出。
復(fù)制代碼 代碼如下:

static void Main(string[] args)
{
    checked
    {
        int a = int.MinValue;
        int c = a>>1;
    }
}

執(zhí)行不會拋異常:

image

3.為了性能考慮,建議Debug時做檢查,Release時不做檢查。

相關(guān)文章

  • C# new與malloc的使用與區(qū)別

    C# new與malloc的使用與區(qū)別

    本文主要介紹了C# new與malloc的使用與區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • C#使用RabbitMQ發(fā)送和接收消息工具類的實現(xiàn)

    C#使用RabbitMQ發(fā)送和接收消息工具類的實現(xiàn)

    RabbitMQ是一個消息的代理器,用于接收和發(fā)送消息,本文主要介紹了C#使用RabbitMQ發(fā)送和接收消息工具類的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • WPF MVVM制作發(fā)送短信小按鈕

    WPF MVVM制作發(fā)送短信小按鈕

    這篇文章主要為大家詳細介紹了WPF MVVM發(fā)送短信小按鈕的制作方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • 關(guān)于C#?調(diào)用Dll?傳遞字符串指針參數(shù)的問題

    關(guān)于C#?調(diào)用Dll?傳遞字符串指針參數(shù)的問題

    這篇文章主要介紹了C#?調(diào)用Dll傳遞字符串指針參數(shù),本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01
  • C# Winform使用log4net進行日志記錄

    C# Winform使用log4net進行日志記錄

    Log4Net是從Java的log4j移植過來的,功能也與log4j類似,可以把日志信息輸出到文件、數(shù)據(jù)庫等不同的介質(zhì)或目標,下面我們就來學(xué)習(xí)一下如何使用log4net進行日志記錄吧
    2023-11-11
  • C#實現(xiàn)判斷文件夾存在與否并創(chuàng)建文件夾的方法

    C#實現(xiàn)判斷文件夾存在與否并創(chuàng)建文件夾的方法

    這篇文章主要介紹了C#實現(xiàn)判斷文件夾存在與否并創(chuàng)建文件夾的方法,涉及C#針對文件及目錄的判斷與創(chuàng)建操作相關(guān)技巧,需要的朋友可以參考下
    2017-02-02
  • C#實現(xiàn)任務(wù)欄通知窗口

    C#實現(xiàn)任務(wù)欄通知窗口

    作為程序員在享受的同時我們也不禁要問:這到底是怎么實現(xiàn)的呢?本文就利用Visual Studio .Net C# 2005以及.Net框架繪圖技術(shù)來實現(xiàn)這種任務(wù)欄通知窗口。
    2015-10-10
  • 詳解C#中三個關(guān)鍵字params,Ref,out

    詳解C#中三個關(guān)鍵字params,Ref,out

    本文主要討論params關(guān)鍵字,ref關(guān)鍵字,out關(guān)鍵字。非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2017-05-05
  • c#中LINQ的基本用法(一)

    c#中LINQ的基本用法(一)

    這篇文章介紹了c#中LINQ的基本用法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • C#操作XML通用方法匯總

    C#操作XML通用方法匯總

    這篇文章主要為大家詳細介紹了C#操作XML通用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10

最新評論