最近、Array.SetValue(Int32) メソッドを使用しているときに C# で例外が発生しました。例外は次のとおりです。
ソース タイプがプリミティブ タイプではないか、変換を実行できないため、ソース タイプからターゲット タイプに拡張できません。
「プリミティブ」という言葉への言及には少々驚きました。なぜなら、これらの型は組み込み型と呼ばれる傾向があり、「プリミティブ型」という用語は非公式な用語であると思っていたからです。「プリミティブ」型と「組み込み値型」の違いは何でしょうか。C# 言語仕様にはプリミティブ型の定義が見つかりません。
ベストアンサー1
プリミティブ型はC#言語仕様では定義されていません。.NET自体で定義されており、プリミティブ型に関する最良のリファレンスは、Type.IsPrimitive
MSDN で、具体的には、「備考」セクションに使用可能なプリミティブ型がリストされています。
完全なリファレンスを得るために、これらはCLI 仕様(セクションI.8.2.2):
一般的な考えとは反対に、型に対応するキーワードがあるからといってないこれをプリミティブ型にする場合、最適な例はおそらく ですstring
。
一方、値型はプリミティブである場合とそうでない場合があります。CLI 仕様で定義されているものに加えて、.NET Framework には「組み込み」の値型がたくさんありますが、それらはプリミティブとして分類されていません。良い例は次のとおりです。DateTime
これはstruct
.NET Framework によって提供されるもので、その定義によれば「組み込み値型」とみなすことができます。値型の詳細については、こちらを参照してください (もちろん組み込み値型についても説明します)。ここ。