2016-07-11 13 views
-3

私はちょうど私のポイントを取得するために何かを書きました。ここでC#sizeof(定数)が定義されていないのはなぜですか

は、実際のサンプルコードです:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace CacheScratch 
{ 
    class Class1 
    { 
     public const int a = 0xABAC; 

     int test() 
     { 
      return sizeof(a); 
     } 
    } 
} 

私はconstのを持っている場合は、なぜ私はエラーが出るん: 重大度コード説明プロジェクトファイルの行の抑制状態 エラーCS0233「」はありませんしたがって、sizeofは安全でないコンテキストでのみ使用できます(System.Runtime.InteropServices.Marshal.SizeOfの使用を検討してください)

固定サイズの変数にはマーシャルが必要なのはなぜですか?

+0

あなたのコードはコンパイルに近いものではありません。存在しない変数を参照しています。あなたは型引数を使用しておらず、 '0xA4B4'は短い形ではありません。 –

+1

https://msdn.microsoft.com/en-us/library/eahchzkf(v=vs.120).aspx –

+7

sizeofはC#での型を取りますが、任意の式ではありません。 –

答えて

1

MSDN: sizeof (C# Reference)から

For all other types, including structs, the sizeof operator can be used only in unsafe code blocks. Although you can use the Marshal.SizeOf method, the value returned by this method is not always the same as the value returned by sizeof. Marshal.SizeOf returns the size after the type has been marshaled, whereas sizeof returns the size as it has been allocated by the common language runtime, including any padding.

Used to obtain the size in bytes for an unmanaged type****

オッズは、あなたがやっていることであるマネージ型、バイト単位でサイズを取得する必要がありますする理由が本当に存在しないことです。

"固定サイズの変数にはなぜマーシャールが必要ですか?"

あなたが探しているのがローカル変数のサイズであれば必ずしもそうである必要はありません。 var size = sizeof(int)またはsizeof(short) とすると、それぞれ4および/または2が返されます。

+0

私の考えは、私の固定サイズの変数には、読みやすさのためにsizeof()を使うことができました。 明らかにそうではありません。 – gismo

関連する問題