Domanda

Ogni custodia dell'Unione in Tipo Unione discriminato ottiene un numero di tag

type Result<'TSuccess,'TFailure> = 
   | Success of 'TSuccess
   | Failure of 'TFailure

let cases = FSharpType.GetUnionCases typedefof<Result<_,_>>
for case in cases do
    case.Tag
.

Dalla considerazione del codice compilato è generato da compilatore e costante a seconda dell'ordine dei casi.Quindi il successo è 0 e il fallimento è 1.

    .
  • Il numero del tag è sempre generato in base all'ordine?Questo è in specifiche F #?
  • è possibile fornire il numero di tag personalizzato, in modo che se l'ordine cambia o metto un altro caso nel mezzo, tra successo e fallimento, i loro numeri di tag non cambiano?

Sto cercando di configurare ProtoBuf-Net per serializzare l'unione discriminata creando il modello di tipo personalizzato e aggiungendo il successo e il fallimento come sottotitoli di risultato.Ma per quello del lavoro è necessario specificare per ogni classe, che deve rimanere costante.Speravo di automatizzare la configurazione, ma avrei dovuto essere in grado di avere un numero relativo a ciascun tipo e per quel relatonship per non cambiare mai.Il tag sembra essere perfetto, se può essere hardcoded nella definizione discriminata dell'Unione.

È stato utile?

Soluzione

Quindi possiamo semplicemente leggere la specifica:

.

Se hai più di un caso, ha un tipo NAYGS CLI NAYGS.Il tipo di u.tags contiene un numero intero letterale per ogni caso, in ordine crescente a partire da zero.

(Sezione 8.5.4)

Quindi sembra che tu possa fare affidamento sull'ordine degli elementi, ma inserire nuovi elementi causerà il creato nuovi numeri.

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