我寫了一段代碼片段來演示這個問題。 的問題是,當我聲明一個結構用Layout.Explicit
狀態, 它分配一個未定義的值,這取決於其它值結構的字段。 只有在使用Layout.Explicit
狀態時纔會出現此問題。 這是很難解釋沒有代碼,所以這裏是一個簡短的例子。奇怪的結構行爲
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