我正在嘗試在 C# 中分配一個結構陣列。例如,
public struct Channel {
int ChannelId;
// other stuff goes here...
}
public struct FrameTraffic {
public int FrameId;
public int MaxChannels;
public Channel[] Channels;
public FrameTraffic(int dummyCS0568 = 0)
{
this.FrameId = 0;
MaxChannels = TableMgr.MaxChannels;
Channels = new Channel[TableMgr.MaxChannels];
}
}
但是當我去分配一個 FrameTraffic 結構陣列時,我看到 Channels 為空。這告訴我 Channels 是一個參考而不是一個結構陣列。我對么?如果是這樣,那么分配 Channels 陣列不應將陣列嵌入到結構中,而應簡單地滿足結構中的參考。我想要嵌入的結構。有沒有辦法做到這一點?還是我的假設不正確?
uj5u.com熱心網友回復:
回答您問題的后半部分并忽略任何其他問題。是的,你是對的,這將是對陣列的參考。但是,如果你想嵌入您可以使用該結構的陣列
我認為有兩件事可能導致這種情況:
- 您只是使用大小初始化陣列但未分配任何值
- 您可能正在使用默認構造而不是您定義的構造初始化 FrameTraffic(這導致了我的實際 NPE)
以下是您如何調整代碼:(我有由 TableMgr.MaxChannels 帶來的硬編碼值,因為我沒有)
class Program
{
static void Main()
{
FrameTraffic fT = new FrameTraffic(0);
foreach (var item in fT.Channels)
{
Console.WriteLine(item.ChannelId);
}
Console.Read();
}
}
public struct Channel
{
public int ChannelId; //missing public exposer if you really want to reassign
// other stuff goes here...
}
public struct FrameTraffic
{
public int FrameId;
public Channel[] Channels;
public FrameTraffic(int dummyCS0568 = 0)
{
this.FrameId = 0;
const int MaxChannels = 1;
//array requires size and its values assigned here
Channels = new Channel[MaxChannels]{ new Channel { ChannelId = 1 } };
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/321413.html
