今日、列挙型の定義でプラス(+)演算子が使用されていたのを偶然見つけました。誰がこれが文書化されているのか考えている?enum定義のplus演算子
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値であるためです。コーダーが使用されていれば良いでしょう。 (ビットOR)代わりに、私は思う。 –
@DanielPrattちょっと洗練されていて、答えとして投稿されるかもしれません。 :) –
私はあなたがフラグとしてこのenumを使用したい場合、この代わりにbitwise ORを使うべきだと思います。これは参考になるかもしれません:http://msdn.microsoft.com/en-us/library/system.flagsattribute.aspx – 0lukasz0