我想知道關於C#枚舉以及重複值會發生什麼。我創建了下面的小程序來測試的事情了: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 . . .
這似乎是我想要什麼,並希望因爲我構建東西,一個版本標籤會每隔一段時間增加一次,所以我想要一些可以「分配」到當前版本的東西,甚至與之相比。
這裏雖然問題:什麼是這種方法的缺陷?有一個嗎?這只是不好的風格(我不想最終在達麗芙上)?有沒有更好的方式來做這樣的事情?我在.NET 2.0上,沒有選擇去3.5或4.0。
受歡迎的意見。
我看到枚舉被轉換爲字符串,我看到一個字符串被解析成一個emum。你在做什麼,你做得對,但你的目標是什麼? – 2009-07-30 18:08:50
@Rob Elliott - 這些東西中的一部分將進入並讀出基於字符串的數據存儲區(不是我的選擇),所以我需要確保我能夠恢復期望的結果。 – 2009-07-30 18:57:55