我偶然發現今天在枚舉定義中使用了加號(+)運算符,我很驚訝地看到隨附的測試通過。任何人有任何想法可以記錄這些?枚舉定義中的加號運算符
public enum ApprovalItemState
{
Enqueued = 1,
Approved = 2,
Denied = 4,
Acknowledged = 8,
ApprovalAcknowledged = ApprovalItemState.Approved + ApprovalItemState.Acknowledged,
DenialAcknowledged = ApprovalItemState.Denied + ApprovalItemState.Acknowledged
}
[TestClass]
public class ApprovalItemStateTests
{
[TestMethod]
public void AreFlagsDeniedAndAcknowledged()
{
Assert.AreEqual(ApprovalItemState.DenialAcknowledged, ApprovalItemState.Denied | ApprovalItemState.Acknowledged);
}
[TestMethod]
public void IsDenialAcknowledged()
{
Assert.IsTrue(Enum.IsDefined(typeof(ApprovalItemState), ApprovalItemState.Denied | ApprovalItemState.Acknowledged));
Assert.AreEqual(ApprovalItemState.Denied | ApprovalItemState.Acknowledged, (ApprovalItemState)Enum.Parse(typeof(ApprovalItemState), "DenialAcknowledged"));
}
[TestMethod]
public void IsNotDeniedAndApproved()
{
Assert.IsFalse(Enum.IsDefined(typeof(ApprovalItemState), ApprovalItemState.Approved | ApprovalItemState.Denied));
}
}
這是因爲枚舉值(默認情況下)只是Int32值。如果編碼器使用|會更好(位或),我想。 – 2012-02-15 21:43:41
@DanielPratt充實了一下,不妨將它發佈爲答案。 :) – 2012-02-15 21:45:40
我認爲你應該使用按位或,而如果你想使用這個枚舉作爲標誌,那麼這可能會有所幫助:http://msdn.microsoft.com/en-us/library/system.flagsattribute.aspx – 0lukasz0 2012-02-15 21:45:46