gpt4 book ai didi

c# - 枚举定义中的加号运算符

转载 作者:太空狗 更新时间:2023-10-29 20:46:10 24 4
gpt4 key购买 nike

我今天偶然发现了枚举定义中加号 (+) 运算符的用法,我很惊讶地看到附带的测试通过了。任何人都知道这可能被记录在哪里?

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));
}
}

最佳答案

里德的回答当然是正确的。我只是想我会添加一些有趣的琐事。首先,当您在枚举内部时,枚举的所有成员都在范围内。这是 C# 中唯一可以通过非限定名称使用枚举成员的情况!

public enum ApprovalItemState 
{
Enqueued = 1,
Approved = 2,
Denied = 4,
Acknowledged = 8,
ApprovalAcknowledged = Approved | Acknowledged,
DenialAcknowledged = Denied | Acknowledged
}

第二个琐事点是 C# 编译器实际上允许在一个枚举中涉及其他枚举的枚举算术!

enum E
{
E1
}
enum F
{
F1
}
enum G
{
G1 = E.E1 + F.F1
}

通常这根本不合法;您不能将两个不同的枚举相加,也不能分配结果。编译器放宽了枚举初始化程序中的这些规则,以便您可以执行以下操作:

enum MyFlags
{
MyReadOnly = FileFlags.ReadOnly,
...

关于c# - 枚举定义中的加号运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9301852/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com