Tôi tình cờ sử dụng toán tử cộng (+) trong định nghĩa enum ngày hôm nay, tôi đã rất ngạc nhiên khi thấy các kiểm tra đi kèm đi qua. Bất cứ ai có bất cứ ý tưởng nơi này có thể được tài liệu?Toán tử cộng trong định nghĩa enum
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));
}
}
Đó là vì giá trị enum (mặc định) chỉ đơn giản là giá trị Int32. Sẽ tốt hơn nếu bộ mã hóa được sử dụng | (bit OR) thay vào đó, tôi nghĩ vậy. –
@DanielPratt Đã phát hiện ra một chút, cũng có thể được đăng dưới dạng câu trả lời. :) –
Tôi nghĩ bạn nên sử dụng bitwise HOẶC thay vào đó, nếu bạn muốn sử dụng enum này làm cờ thì điều này có thể hữu ích: http://msdn.microsoft.com/en-us/library/system.flagsattribute.aspx – 0lukasz0