『壹』 枚舉類型的變數如何使用
首先糾正你一點 枚舉類的全是常量沒有變數~~
判斷的話 if(1 == queryType.ALL){...}
if(1 == queryType.VALID){...}
這樣用
『貳』 C#中的枚舉怎麼使用
using System;
public enum TimeofDay
{
Morning,
Afternoon,
Evening
}
class Test
{
static void WriteGreeting(TimeofDay timeofDay)
{
switch(timeofDay)
{
case TimeofDay.Morning:
Console.WriteLine("good morning");
break;
case TimeofDay.Afternoon:
Console.WriteLine("good afternoon");
break;
case TimeofDay.Evening:
Console.WriteLine("good evening");
break;
}
}
static void Main()
{
WriteGreeting(TimeofDay.Morning);
WriteGreeting(TimeofDay.Evening);
WriteGreeting(TimeofDay.Afternoon);
}
}
『叄』 C#中的枚舉怎麼使用
枚舉類型是一種的值類型,它用於聲明一組命名的常數。
(1)枚舉的聲明:枚舉聲明用於聲明新的枚舉類型。
訪問修辭符 enum 枚舉名:基礎類型
{
枚舉成員
}
基礎類型必須能夠表示該枚舉中定義的所有枚舉數值。枚舉聲明可以顯式地聲明 byte、sbyte、short、ushort、int、uint、long 或 ulong 類型作為對應的基礎類型。沒有顯式地聲明基礎類型的枚舉聲明意味著所對應的基礎類型是 int。
(2)枚舉成員
枚舉成員是該枚舉類型的命名常數。任意兩個枚舉成員不能具有相同的名稱。每個枚舉成員均具有相關聯的常數值。此值的類型就是枚舉的基礎類型。每個枚舉成員的常數值必須在該枚舉的基礎類型的范圍之內。
示例:
public enum TimeofDay:uint
{
Morning=-3,
Afternoon=-2,
Evening=-1
}
產生編譯時錯誤,原因是常數值 -1、-2 和 –3 不在基礎整型 uint 的范圍內。
(3)枚舉成員默認值
在枚舉類型中聲明的第一個枚舉成員它的默值為零。
以後的枚舉成員值是將前一個枚舉成員(按照文本順序)的值加 1 得到的。這樣增加後的值必須在該基礎類型可表示的值的范圍內;否則,會出現編譯時錯誤。
示例:
public enum TimeofDay:uint
{
Morning,
Afternoon,
Evening
}
Morning的值為0,Afternoon的值為1,Evening的值為2。
(4)為枚舉成員顯示賦值
允許多個枚舉成員有相同的值.
沒有顯示賦值的枚舉成員的值,總是前一個枚舉成員的值+1.
示例
public enum Number
{
a=1,
b,
c=1,
d
}
b的值為2,d的值為2.
注意:以上枚舉值都不能超過它的基礎類型範圍。否則會報錯.
(5)枚舉類型與基礎類型的轉換
基礎類型不能隱式轉換為枚舉類型
枚舉類型也不能隱式轉換為基礎類型
示例:
public enum Number
{
a,
b,
c,
d
}
class Test
{
public static void Main()
{
int i=Number.a;//錯誤,要強制類型轉換(int)Number.a
Number n;
n=2 //錯誤,要強制類型轉換(Number)2
}
}
(6)System.Enum類型
System.Enum 類型是所有枚舉類型的抽象基類,並且從 System.Enum 繼承的成員在任何枚舉類型中都可用。
System.Enum 本身不是枚舉類型。相反,它是一個類類型,所有枚舉類型都是從它派生的。
System.Enum 從類型 System.ValueType派生
(7)使用枚舉類型
using System;
public enum TimeofDay
{
Morning,
Afternoon,
Evening
}
class Test
{
static void WriteGreeting(TimeofDay timeofDay)
{
switch(timeofDay)
{
case TimeofDay.Morning:
Console.WriteLine("good morning");
break;
case TimeofDay.Afternoon:
Console.WriteLine("good afternoon");
break;
case TimeofDay.Evening:
Console.WriteLine("good evening");
break;
}
}
static void Main()
{
WriteGreeting(TimeofDay.Morning);
WriteGreeting(TimeofDay.Evening);
WriteGreeting(TimeofDay.Afternoon);
}
}
一、C#枚舉函數用法
1.枚舉數大小寫敏感
比如以下枚舉有兩個枚舉數:
enum EnumTest { Sun, sun }; //盡管如此,我們仍不推薦這樣寫
2.取枚舉數的值
雖然枚舉有類型,但取枚舉數的值時,仍然需要進行類型轉換。
public partial class _ENUM : System.Web.UI.Page
{
enum Range { MIN = 0, MAX = 255 };
protected void Page_Load(object sender, EventArgs e)
{
Response.Write(Range.MAX); //輸出為:MAX
Response.Write(" ");
Response.Write(((int)Range.MAX).ToString()); //輸出為:255
}
}
3.枚舉不能放在函數中
枚舉可以與類平級,也可以作為類的 field,但不能放在函數中。可以加 public 等修飾符。
二、使用枚舉時的建議:
1、優先考慮使用枚舉,而不是類的靜態常量
比如:
public static class Day
{
public static int Sun = 1;
public static int Mon = 2;
public static int Tue = 3;
//...
}
應該使用如下的枚舉:
enum Day { Sun = 1, Mon, Tue, Wed, Thu, Fri, Sat };
2、如果參數、返回值、變數等類型可以是枚舉,則不要使用其它基礎類型
比如:
Range r = Range.MAX; //好
int r = (int)Range.MAX; //不好
3、枚舉命名
枚舉一般使用名詞或名片語合,簡單枚舉使用單數,標志枚舉使用復數。
4、大多數情況下不需要更改枚舉的默認類型
也就是說大多數情況下,使用 int(System.Int32)作為枚舉類型。除非:
·枚舉是標志枚舉,且標志多於 32 個(此時 int 類型裝不下)。
·枚舉被非常大量且頻繁地使用,為了節約空間使用小於 int 的類型。
·不得不使用其它類型的情況。
5、不要在枚舉中設置哨兵
我們可能覺得在枚舉的兩端加上哨兵,這樣在判斷一個數是否在枚舉中時,只需要判斷是否在哨兵之中。 非常不幸,我們不應該這么做,這破壞了枚舉的意義。
enum Day {FirstValue, Sun, Mon, Tue, Wed, Thu, Fri, Sat, LastValue }; //FirstValue、LastValue 應該去掉
三、簡單枚舉和標志枚舉
1、簡單枚舉
前面提到的 Day、Range 都可以稱之為簡單枚舉,因為不能將他們各自的值組合起來。
簡單枚舉包含的值不用於組合,也不用於按位比較。
2、標志枚舉
標志枚舉應使用按位 OR 操作進行組合。
標志枚舉的設計有兩點要注意:
·指明 FlagsAttribute,以指示可以將枚舉作為位域(即一組標志)處理。
·枚舉中各標志的值應該是以 2 的冪來賦值,即:1、2、4、8、16、32……
舉個例子,假如我們在設計 Windows 窗口程序,窗口有最小化、最大化、關閉按鈕,我們想任意組合顯示,也就是說我們可以顯示其中的任意 0 個或一個或多個按鈕。
如果使用簡單枚舉,按照排列組合,我們要使用 1 + 3 + 3 + 1 = 8 個枚舉數,如果這里不是三個按鈕,而是四個按鈕,枚舉數就更多了。所以這樣不現實。為什麼這里使用簡單枚舉不現實呢?因為簡單枚舉不能組合,採用標志枚舉就可以輕松解決了。
[Flags]
public enum WindowStyle
{
MINIMUM_BUTTON = 1, //十六進製表示為 0x0001
MAXIMUM_BUTTON = 2,
CLOSE_BUTTON = 4
}
我們在設置窗口樣式時,利用 OR 自由組合:
WindowStyle ws = WindowStyle.MINIMUM_BUTTON | WindowStyle.CLOSE_BUTTON; //表示既有 MINIMUM_BUTTON 也有 CLOSE_BUTTON
這就是為什麼標志的值要按 2 的冪排列的原因了,也是為什麼標志多於 32 個時不能使用 int 類型的原因了。
通常我們為常用的標志組合提供特殊的枚舉值
仍然以上述窗口為例,可知大多數情況下,我們均要顯示這三個按鈕,所以每次使用時都要用:
WindowStyle ws = WindowStyle.MINIMUM_BUTTON | MAXIMUM_BUTTON | WindowStyle.CLOSE_BUTTON;
實在有些繁瑣,我們可以修改枚舉為如下:
[Flags]
public enum WindowStyle
{
MINIMUM_BUTTON = 1,
MAXIMUM_BUTTON = 2,
CLOSE_BUTTON = 4,
ALL_BUTTON = 7
}
增加一個 ALL_BUTTON 為前三個標志的值。使用時直接用 ALL_BUTTON 就可以了。
using System;
using System.Collections.Generic;
using System.Text;
using System.Globalization;
namespace test
{
public enum Style:int
{
lenovo=1,
acer=2,
dell=3
}
public class PublicBLL
{
private int _itemtype;
public static int ItemType
{
get
{
return _itemtype;
}
set { _itemtype = value; }
}
}
}
PublicBLL.ItemType返回的就是int型的1 or 2 or 3。
如若判斷其值是否等於一個枚舉
if (PublicBll.ItemType==(int)Style.lenovo)
{
//代碼段
}
。
『肆』 C語言枚舉類型是什麼意思
枚舉類型C語言或C++的一種構造類型,它用於聲明一組命名的常數。
(1)枚舉的聲明:枚舉聲明用於聲明新的枚舉類型。
訪問修辭符 enum 枚舉名:基礎類型
{
枚舉成員
} ;
基礎類型必須能夠表示該枚舉中定義的所有枚舉數值。枚舉聲明可以顯式地聲明 byte、sbyte、short、ushort、int、uint、long 或 ulong 類型作為對應的基礎類型。沒有顯式地聲明基礎類型的枚舉聲明意味著所對應的基礎類型是 int。
(2)枚舉成員
枚舉成員是該枚舉類型的命名常數。任意兩個枚舉成員不能具有相同的名稱。每個枚舉成員均具有相關聯的常數值。此值的類型就是枚舉的基礎類型。每個枚舉成員的常數值必須在該枚舉的基礎類型的范圍之內。
示例:
public enum TimeofDay:uint
{
Morning=-3,
Afternoon=-2,
Evening=-1
} ;
產生編譯時錯誤,原因是常數值 -1、-2 和 –3 不在基礎整型 uint 的范圍內。
(3)枚舉成員默認值
在枚舉類型中聲明的第一個枚舉成員它的默值為零。
以後的枚舉成員值是將前一個枚舉成員(按照文本順序)的值加 1 得到的。這樣增加後的值必須在該基礎類型可表示的值的范圍內;否則,會出現編譯時錯誤。
示例:
public enum TimeofDay:uint
{
Morning,
Afternoon,
Evening
} ;
Morning的值為0,Afternoon的值為1,Evening的值為2。
(4)為枚舉成員顯示賦值
允許多個枚舉成員有相同的值.
沒有顯示賦值的枚舉成員的值,總是前一個枚舉成員的值+1.
示例
public enum Number
{
a=1,
b,
c=1,
d
} ;
b的值為2,d的值為2.
注意:以上枚舉值都不能超過它的基礎類型範圍。否則會報錯.
(5)枚舉類型與基礎類型的轉換
基礎類型不能隱式轉換為枚舉類型
枚舉類型也不能隱式轉換為基礎類型
示例:
public enum Number
{
a,
b,
c,
d
} ;
class Test
{
public static void Main()
{
int i=Number.a;//錯誤,要強制類型轉換(int)Number.a
Number n;
n=2 //錯誤,要強制類型轉換(Number)2
}
}
(6)System.Enum類型
System.Enum 類型是所有枚舉類型的抽象基類,並且從 System.Enum 繼承的成員在任何枚舉類型中都可用。
System.Enum 本身不是枚舉類型。相反,它是一個類類型,所有枚舉類型都是從它派生的。
System.Enum 從類型 System.ValueType派生
(7)使用枚舉類型
using System;
public enum TimeofDay
{
Morning,
Afternoon,
Evening
} ;
class Test
{
static void WriteGreeting(TimeofDay timeofDay)
{
switch(timeofDay)
{
case TimeofDay.Morning:
Console.WriteLine("good morning");
break;
case TimeofDay.Afternoon:
Console.WriteLine("good afternoon");
break;
case TimeofDay.Evening:
Console.WriteLine("good evening");
break;
}
}
static void Main()
{
WriteGreeting(TimeofDay.Morning);
WriteGreeting(TimeofDay.Evening);
WriteGreeting(TimeofDay.Afternoon);
}
}