您好我在C#中编写了嵌套结构。找到下面的代码段:
public struct SMB_MESSAGE
{
#region SMB Parameter
public struct SMB_PARAMETERS
{
public byte WordCount;
public ushort[] Words;
}
#endregion
#region SMB Data
public struct SMB_DATA
{
public ushort ByteCount;
public struct Bytes
{
public ushort BufferFormat;
public byte[] Name;
}
}
#endregion
}
现在,我将Value分配给Inner结构,如下所示:
SMB_MESSAGE SMBMESSAGE;
SMB_MESSAGE.SMB_PARAMETERS SMBPARAMETER;
SMBPARAMETER.WordCount=12;
SMBPARAMETER.Words=null;
SMB_MESSAGE.SMB_DATA SMBDATA;
SMBDATA.ByteCount=byteCount;
SMB_MESSAGE.SMB_DATA.Bytes bytes;
bytes.BufferFormat=bFormat;
bytes.Name=name;
现在,当我在调试时查看SMBMESSAGE的值时,显示NameSpace.Form1.SMB_MESSAGE
并且其中没有值。我也看不到将值赋予SMBMESSAGE
的方法。
如果我们不能分配值,那么为什么我们需要使用嵌套结构?
答案 0 :(得分:0)
你的两个内部结构是嵌套的类型,而不是实例成员 嵌套类型对父类型的实例没有影响;它们是一个纯粹的组织概念(除了他们可以访问父类型的私人成员)
因此,您的SMB_MESSAGE
结构实际上没有任何实例成员。
你需要制作四个普通结构,然后在SMB_MESSAGE
中生成另外两个结构的两个属性。
例如:
public struct SMB_MESSAGE {
public SMB_PARAMETERS Parameters;
public SMB_DATA Data;
}
public struct SMB_PARAMETERS
{
public byte WordCount;
public ushort[] Words;
}
public struct SMB_DATA
{
public ushort ByteCount;
public Bytes Bytes;
}
public struct Bytes
{
public ushort BufferFormat;
public byte[] Name;
}