Mi chiedevo di enumerazioni C# e cosa succede con i valori duplicati. Ho creato il seguente piccolo programma per testare le cose:C# Enumerazioni e valori duplicati - pericoli?
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");
}
}
}
}
che produce il seguente output:
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 . . .
Questo sembra essere esattamente quello che voglio e si aspettano dal momento che sto costruendo qualcosa che una versione il tag aumenterà di tanto in tanto, quindi voglio qualcosa che posso "assegnare" alla versione corrente e persino confrontarlo con esso.
Ecco la domanda però: quali sono le insidie di questo approccio? Ce n'è uno? E 'solo cattivo stile (non voglio finire su thedailywtf)? C'è un modo molto migliore di fare qualcosa del genere? Sono su .NET 2.0 e NON ho la possibilità di andare a 3.5 o 4.0.
Le opinioni sono benvenute.
Vedo che le enumerazioni vengono convertite in stringhe, Vedo una stringa che viene analizzata in una emum. Che cosa stai facendo, stai facendo correttamente, ma qual è il tuo obiettivo? –
@Rob Elliott - alcune di queste cose andranno in e leggeranno da un archivio dati basato su stringhe (non è una mia scelta), quindi devo assicurarmi di recuperare ciò che mi aspetto. –