gpt4 book ai didi

C# 枚举和重复值 - 危险?

转载 作者:太空狗 更新时间:2023-10-29 22:35:21 31 4
gpt4 key购买 nike

我想知道 C# 枚举以及重复值会发生什么。我创建了以下小程序来测试:

namespace ConsoleTest
{

enum TestEnum
{
FirstElement = -1,
SecondElement,
ThirdElement,
Duplicate = FirstElement
}

/// <summary>
/// Summary description for MainConsole.
/// </summary>
public class MainConsole
{
/// <summary>
/// Constructor for the class.
/// </summary>
public MainConsole()
{
//
// TODO: Add constructor logic here
//
}
/// <summary>
/// Entry point for the application.
/// </summary>
/// <param name="args">Arguments to the application</param>
public static void Main(string[] args)
{
TestEnum first = TestEnum.FirstElement;
TestEnum second = TestEnum.SecondElement;
TestEnum duplicate = TestEnum.Duplicate;

foreach (string str in Enum.GetNames(typeof(TestEnum)))
{
Console.WriteLine("Name is: " + str);
}

Console.WriteLine("first string is: " + first.ToString());
Console.WriteLine("value is: " + ((int)first).ToString());
Console.WriteLine("second string is: " + second.ToString());
Console.WriteLine("value is: " + ((int)second).ToString());
Console.WriteLine("duplicate string is: " + duplicate.ToString());
Console.WriteLine("value is: " + ((int)duplicate).ToString());

TestEnum fromStr = (TestEnum)Enum.Parse(typeof(TestEnum), "duplicate", true);
Console.WriteLine("fromstr string is: " + fromStr.ToString());
Console.WriteLine("value is: " + ((int)fromStr).ToString());
if (fromStr == TestEnum.Duplicate)
{
Console.WriteLine("Duplicate compares the same as FirstElement");
}
else
{
Console.WriteLine("Duplicate does NOT compare the same as FirstElement");
}

}
}
}

产生以下输出:

Name is: SecondElement
Name is: ThirdElement
Name is: FirstElement
Name is: Duplicate
first string is: FirstElement
value is: -1
second string is: SecondElement
value is: 0
duplicate string is: FirstElement
value is: -1
fromstr string is: FirstElement
value is: -1
Duplicate compares the same as FirstElement
Press any key to continue . . .

这似乎正是我想要和期望的,因为我正在构建一个版本标签会经常递增的东西,所以我想要一些我可以“分配”给当前版本的东西,甚至可以与它进行比较。

但问题是:这种方法的缺陷是什么?有吗?只是风格不好(我不想在 thedailywtf 上结束)?有没有更好的方法来做这样的事情?我使用的是 .NET 2.0,无法选择转到 3.5 或 4.0。

欢迎提出意见。

最佳答案

如果您有标志枚举,则提供别名枚举值会很有用。例如

[Flags]
enum Rows {
Even = 0x01,
Odd = = 0x02,
All = Even | Odd
}

但是,如果您阅读 Cwalina 和 Abrams 编写的 Framework Design Guidelines 中的枚举指南,您会发现以下建议:

DO NOT use an enum for open sets (such as the operating system version, names of your friends etc.).

DO NOT include sentinel values in enums.

拥有当前版本是一个标记值。

这些准则适用于框架设计,如果您只想在应用程序内部使用枚举,那么即使违反这些准则也没有关系。但是,Microsoft 制定了这些准则,以避免在其他开发人员必须使用您的代码时出现常见陷阱。

关于C# 枚举和重复值 - 危险?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1208247/

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