2013-05-16 15 views
26

Recentemente ho rilevato un'eccezione in C# durante l'utilizzo del metodo Array.SetValue (Int32). L'eccezione è stata:"Tipi primitivi" rispetto a "tipi di valore predefiniti"

Non può allargarsi dal tipo di origine al tipo di destinazione sia perché il tipo di origine è un non un tipo primitivo o la conversione non può essere compiuta.

Il riferimento alla parola "primitivo" mi ha sorpreso un po 'perché ho pensato che la tendenza era quella di fare riferimento a questi tipi di tipi predefiniti, inoltre, che il termine "tipo primitivo" era un termine informale. Qual è la differenza tra tipi "primitivi" e "tipi di valore predefiniti"? Non trovo una definizione di tipi primitivi nelle specifiche del linguaggio C#.

+4

I tipi primitivi sono definiti in CLR, non in C#. http://msdn.microsoft.com/en-us/library/aa711900.aspx –

+3

Esempio: DateTime è un tipo di valore ma non è una primitiva. 'int',' char' ecc. sono primitivi. – Candide

+0

Puoi farlo una risposta –

risposta

35

I tipi primitivi non sono definiti nella specifica del linguaggio C#. Sono invece definiti in .NET e il miglior riferimento per i tipi primitivi è quello di guardare direttamente a Type.IsPrimitive su MSDN. In particolare, nella sezione Note sono elencati i tipi primitivi disponibili.

In modo che abbiamo un riferimento completo qui, questi sono i tipi primitivi definiti nel CLI Spec (Sezione I.8.2.2):

Contrariamente alla credenza popolare, solo perché un tipo ha una parola chiave corrispondente non è non rendendolo un tipo primitivo, l'esempio migliore è probabilmente string.

I tipi di valore, d'altra parte, possono anche non essere primitivi. Esistono molti tipi di valore "integrati" in .NET Framework oltre a quelli definiti nella specifica CLI, ma non sono classificati come primitivi. Un buon esempio è DateTime, che è un struct fornito da .NET Framework, da tale definizione potrebbe essere considerato un "tipo di valore predefinito". Puoi leggere di più sui tipi di valore (che ovviamente copriranno anche quelli integrati) here.

Problemi correlati