2016-07-11 5 views
-3

Мне жаль, что я просто написал что-то, чтобы получить мою точку.C# Почему размер (константа) не задан

Вот конкретный пример кода:

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

Если у меня есть константный, почему я получаю сообщение об ошибке: Тяжесть Код Описание проекта Line File Подавление State CS0233 Error «а» не имеет предопределенный размер, поэтому 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

Смежные вопросы