11. august 2006 - 10:07Der er
19 kommentarer og 1 løsning
Problemer med enums
Hej
Jeg er løbet ind i en sjov situation med enums i .NET. Eller også er det bare mig der misforstår noget.
Jeg har en enum i én assembly:
public enum MyEnum { Enum1, Enum2, Enum3 }
Og en anden assembly der bruger denne enum:
Something som = SomeClass.GetSomething (MyEnum.Enum1); Nu er som = MyEnum.Enum1;
Problemet opstår i det øjeblik hvor jeg laver min enum om til:
public enum MyEnum { Enum0, Enum1, Enum2, Enum3 }
Uden igen at compile den assembly der bruger min enum.
Something som = SomeClass.GetSomething (MyEnum.Enum1); Nu er: som = MyEnum.Enum0;
Og det er jo ikke det jeg vil.
Så mit spørgsmål går på om ikke det er muligt at reorder mine enums, når først en client har compilet op mod dem?
Jeg ved godt jeg kan give mine enums værdier, som sikkert vil løse problemet, men jeg kunne godt tænke mig friheden bare at kunne sortere/gruppere mine enums uden at værdierne vil stå usorteret.
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
Jeg vil tro at du har copy local sat til true under din reference property. Det vil sige at den assembly der benytter din enum, har en kopi af din dll ligende og det er så den den benytter, hvorfor dine ændringer ikke slår igennem. Kopier din nye dll over og overskriv, så burde der ikke være nogle problemer. Dette kan eventuelt laves til et post-compile script, da det jo skal gøres hver gang du kompilere din enum assembly. Du kan også sige copy local = false, men så får du hurtigt problemer med hvem der har fat i iden.
Ved kørsel af main og brug af første enum assembly var resultatet 1. Ved næste kørsel med ny assembly var resultatet 2.
Så det var jo som forventet. Men jeg tror ikke du kan komme uden om at enum værdien ændrer sig uden at give dem fastlagte værdier. Men det burde jo heller ikke gøre noget når det jo er den rigtige enum man får fat i med f.eks. EnumTest.test2
public class Test { public static void Main(string[] args) { Console.WriteLine((int)V.X); } }
C:\>csc /t:library /out:v.dll v1.cs Microsoft (R) Visual C# .NET Compiler version 7.10.6001.4 for Microsoft (R) .NET Framework version 1.1.4322 Copyright (C) Microsoft Corporation 2001-2002. All rights reserved.
C:\>csc /t:exe /r:v.dll test.cs Microsoft (R) Visual C# .NET Compiler version 7.10.6001.4 for Microsoft (R) .NET Framework version 1.1.4322 Copyright (C) Microsoft Corporation 2001-2002. All rights reserved.
C:\>test 1
C:\>csc /t:library /out:v.dll v2.cs Microsoft (R) Visual C# .NET Compiler version 7.10.6001.4 for Microsoft (R) .NET Framework version 1.1.4322 Copyright (C) Microsoft Corporation 2001-2002. All rights reserved.
C:\>test 1
C:\>csc /t:exe /r:v.dll test.cs Microsoft (R) Visual C# .NET Compiler version 7.10.6001.4 for Microsoft (R) .NET Framework version 1.1.4322 Copyright (C) Microsoft Corporation 2001-2002. All rights reserved.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.