如果你希望对枚举类型进行位操作,
比如注意以下两点:
1、在定义的时候,必须用 2 的幂(即 1、2、4、8 等)定义枚举常量。不可以不附值。
2、如果Web Service用到枚举类型,一定不要用枚举类型的数字值,因为服务器端和客户端会不一样。
再看一个稍稍复杂的例子,用上面的知识点,就可以解释后面的例子为啥会这样。
比如有这样一个Web Service。
[Flags]
public enum MultiHue
{
Black = 8,
Red = 1,
Green = 2,
Blue = 4
};
[WebMethod]
public MultiHue GetColor()
{
return MultiHue.Red | MultiHue.Green | MultiHue.Black;
}
客户端调用代码如下:
localhost.WebService ws = new Client.localhost.WebService();
localhost.MultiHue re = ws.GetColor();
Console.WriteLine(re);
Console.WriteLine((int)re);
Console.ReadLine();
这时候控制台显示的信息是:
Black, Red, Green
7
而这时候VS2005产生的客户端的MultiHue 枚举为:
[System.FlagsAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.42")]
[System.SerializableAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="
http://tempuri.org/")]
public enum MultiHue {
/// <remarks/>
Black = 1,
/// <remarks/>
Red = 2,
/// <remarks/>
Green = 4,
/// <remarks/>
Blue = 8,
}