webForumDet fria alternativet

Få ut int från enum

.NET

7 svar · 303 visningar · startad av Dino

Medlem sedan sep. 20011 914 inlägg
Frågan#1

Hur gör jag för att få ut siffran 2 från TestEnum.BBB. Går det, eller skall jag köra på struct modellen.

public enum TestEnum : int
{
   AAA = 1,
   BBB,
   CCC,
   DDD
}

public struct TestStruct
{
   public const int AAA = 1;
   public const int BBB = 2;
   public const int CCC = 3;
   public const int DDD = 4;
}

...

Response.Write(TestStruct.AAA.ToString()); // = 1
Response.Write(TestEnum.BBB.ToString()); // = BBB
Medlem sedan dec. 19996 721 inlägg
#2

Nej, en struct lämpar sig inte. Det borde räcka fint med att "casta" enum-värdet.

Response.Write(((int)TestEnum.BBB).ToString());

Medlem sedan apr. 20012 266 inlägg
#3

Flyttas från ASP.NET

Medlem sedan juli 20022 537 inlägg
#4

Jag har för mig att du kan få ut det med GetHashCode() som returnerar en Int32.

Response.Write(TestEnum.BBB.GetHashCode());
Medlem sedan maj 20012 812 inlägg
#5

GetHashCode() returnerar ett UNIK id för just detta objekt och behöver inte alls vara det värdet som finns i enumen.

Medlem sedan juli 20022 537 inlägg
#6

Gladh skrev:

GetHashCode() returnerar ett UNIK id för just detta objekt och behöver inte alls vara det värdet som finns i enumen.

Vad menar du?
Om man kör den här koden:

Public Class EnumTest

    Public Enum Manad
        Januari = 1
        Februari = 2
        Mars = 3
        April = 4
        Maj = 5
        Juni = 6
        Juli = 7
        Augusti = 8
        September = 9
        Oktober = 10
        November = 11
        December = 12
    End Enum

    Public Function Test(ByVal strMonth As Manad)
        Return strMonth.GetHashCode()
    End Function

End Class

och sen...:

Module Module1

    Sub Main()
        Dim MyEnum As New EnumTest
        Console.WriteLine(MyEnum.Manad.Februari.GetHashCode())
    End Sub

End Module

...så skriver den ut "2", vilket ser rätt ut?

Medlem sedan sep. 20011 914 inlägg
#7

Ok, tackar. Båda alternativen funkar. I Enum classen så är GetHashCode overridden och verkar få värdet dess constant har.

Medlem sedan maj 20012 812 inlägg
#8

I Enum classen så är GetHashCode overridden och verkar få värdet dess constant har.

Där ser man, det hade jag ingen anning om, man lär sig något nytt varje dag.

- Magnus

258 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)