程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 測試中的代碼分享~位運算用擔心重復賦值嗎

測試中的代碼分享~位運算用擔心重復賦值嗎

編輯:C#入門知識

如果不清楚位運算的同學,可以看我的這篇文章《基礎才是重中之重~位的運算》及《整形變量是否可以進行位運算(像枚舉類型一樣)》

今天我們主要要作的是,驗證位運算中或運算與加法運算(+),與非運算(減操作)與減法運算(-)之間的區別,對於一個被標示為Flags特性的枚舉類型和特殊的數值類型(2的N次方組成)來說,它們的位運算會存在一些特性,而我們利用這些特性可以減少我們程序設計時的復雜度,這個很重要。

我們的例子用一個枚舉類型的對象FileProperty來說明,看它的定義如下:

= = = 

下面是對這個對象的位運算,先看一個或運算,我更習慣稱它為加法位運算:

           en =|||| enAdd =++++, en.GetHashCode(), enAdd.GetHashCode());

 

我們看到,代碼中的被加了多次,我們看一下結果

通過上面的例子,我們知道,位運算時,無論你的相同的數值有多少重復,結果在計算時,只會產生一個值,如果想知道原理,可以把它轉換成二進制,結果就不難看出了。(或運算原則是:兩個操作數,按位置進行或運算,其中一個數只要為1,結果就為1)

 |  =   
 | = 
| | =

下面是位運算中的與非運算,我更習慣稱它為減法位運算:

    en2 =||||= en2 & (~(FileProperty.Read | FileProperty.Read)); 
   Console.WriteLine(, en2);

結果為:

而如果希望檢查一個枚舉對象中(Flags類型的)是否包含某個枚舉元素,可以使用.net4.0中的HasFlag方法,讓我們來看一下

             resultMsg = en + 
            Console.WriteLine(resultMsg, FileProperty.Write,en.HasFlag(FileProperty.Write));
            Console.WriteLine(resultMsg, FileProperty.Replace,en.HasFlag(FileProperty.Replace));

結果為:

利用這個特性,我們有這樣的一個工作,找到所有文件包含的屬性種類,看代碼:

       FileID { ;   Filename { ;  FileProperty FileProperty { ; 
           List<File> fileList =  List<File>  File{FileID=,Filename=, FileProperty=  File{FileID=,Filename=, FileProperty== = = FileProperty.Read |==>|= + propertyAll);

結果為:

有時,我們多掌握一點知識,可能會使我們設計的程序更加簡單,呵呵!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved