2016-04-12 20 views
5

Esiste una soluzione alternativa per l'errore CS1663 ("Il tipo di buffer di dimensione fissa deve essere uno dei seguenti: bool, byte, short, int, long, char, sbyte, ushort, uint, ulong, float o double.")?Soluzione alternativa per la dichiarazione di un struct array personalizzato fisso non sicuro?

Ho bisogno di dichiarare una matrice fissa non sicura da un'altra struttura di tipo personalizzato blittable ma sono bloccato in questo errore del compilatore.

Mostrare qualche codice per chiarire il problema di seguito.

struct s1 
{ 
    byte _b1; 
    byte _b2; 
} 

unsafe struct s2 
{ 
    fixed s1 _s1[5]; // CS1663 here... 
} 

Si noti che le due strutture sono blittibili, quindi l'errore non ha alcun senso per me.

Qualcuno ha qualche idea su cosa potrei fare?

Grazie.

+0

vuoi dire non sicuri 'struct s2 { s1 s1 fisse [5]; } '? –

+0

Sì !!! Risolverò questo piccolo errore nello snippet di codice, grazie. Qualche idea su questo @VadimMartynov? – ptr0x

+0

Bene, hai solo un errore di sintassi. Dovresti dichiarare i modificatori di campo (come privato, fisso, readonly, statico e altro), il tipo di campo (come byte, int, s1, stringa) e il nome del campo (qualsiasi nome che verrà usato per refferare il tuo varable. digita (s1) Ulteriori informazioni sulla dichiarazione di buffer fissi: https://msdn.microsoft.com/en-us/library/zycewsya(v=vs.80).aspx –

risposta

0

È una limitazione di fixed size buffers.

L'array fisso può accettare qualsiasi attributo o modificatore che sia consentito per membri normali della struttura. L'unica limitazione è che il tipo array deve essere bool, byte, char, breve, int, lungo, sbyte, ushort, uint, ulong, galleggiante o doppio.

È possibile utilizzare solo quel tipo ma non la combinazione (come struct contiene solo quel tipo). Non c'è differenza se il tuo tipo è bittabile o meno. Non puoi semplicemente usarlo.

Quindi non è possibile utilizzare il valore personalizzato struct per il buffer di dimensioni fisse.

Soluzione alternativa? Mmmm, sì, potrebbe essere. È possibile modificare la struttura del codice e utilizzare qualcosa di simile:

unsafe struct s2 
{ 
    fixed byte _b1[5]; 
    fixed byte _b2[5]; 
} 
+0

Rispondere al mio commento sopra: "@VadimMartynov So che ho un errore di sintassi: D La mia domanda ruota attorno al" perché "sto ricevendo questo errore di sintassi.L'unico motivo di questo errore che posso immaginare è di evitare di fissare in memoria un tipo non modificabile. Il punto è che il mio tipo è effettivamente blittabile. Ci deve essere qualche soluzione per questa limitazione, questo dovrebbe essere un problema molto comune. " – ptr0x

+0

La tua soluzione non corrisponde al mio esempio! Nell'esempio finirò con un buffer raw lineare con 5 elementi che rappresentano _b1 e 5 elementi che rappresentano _b2 Nel mio esempio il buffer in memoria dovrebbe essere della stessa dimensione ma organizzato in modo diverso: prima 1 elemento di _b1, quindi 1 elemento di _b2 e così via – ptr0x

+0

Beh, questo è il motivo per cui questa soluzione alternativa è stata definita: –

Problemi correlati