Me encontré con el uso del operador más (+) en una definición enum hoy, me sorprendió ver pasar las pruebas correspondientes. ¿Alguien tiene alguna idea de dónde puede documentarse esto?El operador más en la definición 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));
}
}
Se debe a que los valores de enumeración son (por defecto) los valores simplemente Int32. Sería mejor si el codificador utilizara | (bit O) en cambio, creo. –
@DanielPratt Desarrollado un poco, que también podría publicarse como la respuesta. :) –
Creo que deberías usar bitwise O en su lugar, si quieres utilizar esta enumeración como indicador, esto puede ser útil: http://msdn.microsoft.com/en-us/library/system.flagsattribute.aspx – 0lukasz0