2016-07-11 10 views
-3

Es tut mir leid, ich habe nur etwas geschrieben, um meinen Standpunkt zu verstehen.C# Warum ist die Größe von (konstant) nicht definiert

Hier ein aktuelles Beispiel-Code ist:

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); 
     } 
    } 
} 

Wenn ich ein const haben, warum bekomme ich den Fehler: Severity Code Beschreibung Projektdatei Zeilenunterdrückung Staat CS0233 Fehler ‚a‘ nicht über ein vordefinierte Größe, daher kann sizeof nur in einem unsicheren Kontext verwendet werden (in Erwägung ziehen mit System.Runtime.InteropServices.Marshal.SizeOf)

Warum brauche ich einen Marshal für eine Variable fester Größe?

+0

Ihr Code ist nicht in der Nähe zu kompilieren. Sie referenzieren eine nicht vorhandene Variable, Sie verwenden kein Typargument und '0xA4B4' passt nicht in einen kurzen. –

+1

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

+7

sizeof nimmt einen Typ in C#, kein beliebiger Ausdruck. –

Antwort

1

Von 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****

Quoten sind, dass es wirklich keinen Grund, die Größe in Bytes für einen verwalteten Typ, zu müssen, ist das, was Sie tun, ist zu erhalten.

"Warum brauche ich einen Marshal für eine Variable fester Größe?"

Sie müssen nicht notwendigerweise, wenn alles, was Sie suchen, die Größe Ihrer lokalen Variable ist. Sie können einfach var size = sizeof(int) oder sizeof(short) anrufen, die 4 bzw. 2 zurückgeben.

+0

Meine Idee war, für die Lesbarkeit könnte ich die sizeof() für meine Variablen fester Größe verwenden. Offensichtlich nicht. – gismo

Verwandte Themen