Я написал небольшой фрагмент кода, чтобы продемонстрировать эту проблему. Проблема заключается в том, что когда я объявляю структуру с состоянием Layout.Explicit
, присваивает неопределенное значение полям этой структуры в зависимости от другого значения. Эта проблема возникает только при использовании состояния Layout.Explicit
. довольно сложно объяснить без кода, поэтому вот краткий образец.Weird Struct Behavior
using System.Runtime.InteropServices;
namespace ConsoleStruct
{
class Program
{
[StructLayout(LayoutKind.Explicit)]
struct TestStruct
{
[FieldOffset(0)]
public double dbl;
[FieldOffset(0)]
public ulong uu;
}
public static void SimpleMethod()
{
TestStruct st;
st.uu = 0;
st.dbl = 5000.0;
Console.WriteLine(st.uu.ToString()); // ==> uu becomes 4662219572839972864
//instead of 0 :(
// it looks like the value of uu is dependent on the
//value assigned to dbl
Console.ReadLine();
}
static void Main(string[] args)
{
SimpleMethod();
}
}
}
Может кто-нибудь объяснить мне, почему это происходит. Использование VS 2013. Спасибо.
Ну да, это точно точка определения полей с тем же FieldOffset, они перекрываются, потому что вы * явно запросили его * – harold
Хм, не уверен, что это недоразумение здесь. Как вы думаете, '' [FieldOffset (0)] 'делает? Чего ты хочешь достичь? – usr