Domanda

Immagina questo enum in una DLL.

public enum Colors
{
    Red,
    Green
}
.

Aggiunta di valori Enum Break Binary Compatibilità?Se dovessi cambiarlo, gli ex esistenti si spezzano?

public enum Colors
{
    Red,
    Green,
    Blue
}
.

Ho visto Questa risposta , ma sembrava affrontare il caso di inserimento un valore.Se aggiungo valori a la fine solo , è OK?

È stato utile?

Soluzione

No, questo non rompe la compatibilità binaria (in quanto: l'Assembly caricherà ancora ecc.), Poiché gli enums sono fondamentalmente costanti letterale intera.L'inserimento di valori nel mezzo è ovviamente un'idea davvero pericolosa, ma ne hai già escluso.

Tuttavia, può causare una serie di altri problemi che è necessario proteggere contro:

    .
  • Alcuni codici (dichiarazioni switch in particolare) potrebbero non anticipare i nuovi valori;Tecnicamente questo è stato anche un problema, dal momento che gli enum non sono controllati di valore (le variabili di enum possono contenere valori indefiniti)
  • Tutto ciò che interroga gli enum disponibili per ottenere risultati diversi
      .
    • In particolare, la serializzazione e la deserializzazione potrebbero non riuscire in modo imprevisto se ci sono dati che utilizzano enumi che non sono ancora previsti dal particolare cliente

Altri suggerimenti

Dovrebbe andare bene, supponendo che tu ti aggiunga solo alla fine.Tuttavia, il rischio di rottura derirrebbe dal fatto che i valori di enum sono definiti implicitamente, a partire da 0. Quindi se qualcuno sta persistendo i valori a un DB, si rischia di cambiare i valori che mappano.

Come esempio, se hai cambiato il tuo enum per essere:

public enum Colors
{
    Blue,
    Red,
    Green
}
.

Chiunque abbia immagazzinato questi valori nei loro DBs vedrebbe che le cose che un tempo erano rosse sono ormai blu, e ciò che era verde è ormai rosso.

Idealmente, dovresti definire il tuo enum come:

public enum Colors
{
    Red = 0,
    Green = 1
}
.

E poi, quando aggiungi uno nuovo, dovresti avere:

public enum Colors
{
    Red = 0,
    Green = 1,
    Blue = 2
}
.

Aiuterà a prevenire eventuali potenziali problemi di controllo delle versioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top