: 我宣告一個struct...
: struct Student
: {
: [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
: public int[] No;
: }
:
: 然後在Main裡面
: Student[] stu = new Student[50];
: 則
: stu[1].No[2] = 5;
: 不知道這個式子為什麼會錯誤??
: 是不是沒有new?
: 換用class可以解決嗎?
: = ="剛學C#不太熟...麻煩高手指教...謝謝!!
:
: 推 tomex:你的No[]並未初始化,記得要先new才能assign值! 10/16 20:11
不好意思,我也是剛學c#,也想請問一下
我有查到他是因為沒有被實體化,要new才能使用,
但是我很疑惑,No不是已經用MarshalAs轉成陣列了嗎?
如果這個只能當作指標,為何還要給予SizeConst長度?
如果是為了讓Marshal.Sizeof計算struct的大小,那他不就已經是陣列才要將陣列的
長度大小進去嗎?
我有使用Marshal.Sizeof檢查,確定陣列的長度會算入結構裡面,所以看起來應該是
建立了陣列,才會這樣。但實際上,我卻必須new給No一段空間,才能使用,用起來卻
像是指標。
我如果用string, [MarshalAs(UnmanagedType.ByValStr)]轉換的話,就不需要再new,
雖然使用sreing本來就可以直接賦值,但總是覺得怪怪的,不太懂Array為何不是被定義
成陣列,而是變成類似指標?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.66.251.14
※ 編輯: clarkman 來自: 203.66.251.14 (01/25 10:48)