如何在不为每个成员使用一行代码的情况下填充结构数组?
How to populate array of structs, without using a line for code for each member?
我目前正在尝试寻找一种更好的方法来填充结构数组。
首先,这是制作我的 struct
的数据
enum DataType
{
Uint8, Uint16, Byte, Int16, Int32,
TypeSatInfo, TypeCell, ByteArray
}
enum ReadWriteState
{
ReadWrite, ReadOnly, WriteOnly
}
struct Parameter
{
public string ParamName;
public short ParamId;
public DataType Datatype;
public ReadWriteState ReadWrite;
}
然后我有一个 class 应该包含我填充的数组
static class Parameters
{
public static Parameter[] Param = new Parameter[80];
}
我的最后一部分是函数,我想用它来填充数组。
void populateParameters()
{
Parameters.Param[0].ParamName = "RevProtocol";
Parameters.Param[0].ParamId = 0x0001;
Parameters.Param[0].Datatype = DataType.Uint16;
Parameters.Param[0].ReadWrite = ReadWriteState.ReadOnly;
Parameters.Param[1].ParamName = "HwProtocol";
Parameters.Param[1].ParamId = 0x0002;
Parameters.Param[1].Datatype = DataType.Uint16;
Parameters.Param[1].ReadWrite = ReadWriteState.ReadOnly;
//keep this going until array is full.
}
我希望做这样的事情:
Parameters.Param[80] = {{"RevProtocol", 0x0001, DataType.Uint16, ReadWriteState.ReadOnly},
{"HwProtocol", 0x0002, DataType.Uint16, ReadWriteState.ReadOnly}}
通过这样做,我希望能够一次填充整个数组,但我似乎找不到正确的语法。这样的事情可能吗?
你很接近。使用对象和集合初始值设定项时,您仍然需要使用 new
关键字:
Parameters.Param = new Parameter[]
{
new Parameter { ParamId = 0x0001, ParamName = "RevProtocol", Datatype = DataType.Byte },
new Parameter { ParamId = 0x0002, ParamName = "HwProtocol", Datatype = DataType.TypeCell },
};
中查看更多详细信息
作为替代方案,正如您在评论中询问如何在不必指定每个 属性 名称的情况下执行此操作一样,您可以使用 class 而不是结构,并添加自定义构造函数:
class Parameter
{
public string ParamName;
public short ParamId;
public DataType Datatype;
public ReadWriteState ReadWrite;
public Parameter(string name,short id,DataType dt,ReadWriteState rw)
{
this.ParamName = name;
this.ParamId = id;
this.Datatype = dt;
this.ReadWrite = rw;
}
}
这样,您可以像这样初始化数组:
Parameters.Param = new Parameter[]
{ new Parameter("RevProtocol", 0x0001, DataType.Uint16, ReadWriteState.ReadOnly),
new Parameter("HwProtocol", 0x0002, DataType.Uint16, ReadWriteState.ReadOnly)};
我目前正在尝试寻找一种更好的方法来填充结构数组。 首先,这是制作我的 struct
的数据enum DataType
{
Uint8, Uint16, Byte, Int16, Int32,
TypeSatInfo, TypeCell, ByteArray
}
enum ReadWriteState
{
ReadWrite, ReadOnly, WriteOnly
}
struct Parameter
{
public string ParamName;
public short ParamId;
public DataType Datatype;
public ReadWriteState ReadWrite;
}
然后我有一个 class 应该包含我填充的数组
static class Parameters
{
public static Parameter[] Param = new Parameter[80];
}
我的最后一部分是函数,我想用它来填充数组。
void populateParameters()
{
Parameters.Param[0].ParamName = "RevProtocol";
Parameters.Param[0].ParamId = 0x0001;
Parameters.Param[0].Datatype = DataType.Uint16;
Parameters.Param[0].ReadWrite = ReadWriteState.ReadOnly;
Parameters.Param[1].ParamName = "HwProtocol";
Parameters.Param[1].ParamId = 0x0002;
Parameters.Param[1].Datatype = DataType.Uint16;
Parameters.Param[1].ReadWrite = ReadWriteState.ReadOnly;
//keep this going until array is full.
}
我希望做这样的事情:
Parameters.Param[80] = {{"RevProtocol", 0x0001, DataType.Uint16, ReadWriteState.ReadOnly},
{"HwProtocol", 0x0002, DataType.Uint16, ReadWriteState.ReadOnly}}
通过这样做,我希望能够一次填充整个数组,但我似乎找不到正确的语法。这样的事情可能吗?
你很接近。使用对象和集合初始值设定项时,您仍然需要使用 new
关键字:
Parameters.Param = new Parameter[]
{
new Parameter { ParamId = 0x0001, ParamName = "RevProtocol", Datatype = DataType.Byte },
new Parameter { ParamId = 0x0002, ParamName = "HwProtocol", Datatype = DataType.TypeCell },
};
中查看更多详细信息
作为替代方案,正如您在评论中询问如何在不必指定每个 属性 名称的情况下执行此操作一样,您可以使用 class 而不是结构,并添加自定义构造函数:
class Parameter
{
public string ParamName;
public short ParamId;
public DataType Datatype;
public ReadWriteState ReadWrite;
public Parameter(string name,short id,DataType dt,ReadWriteState rw)
{
this.ParamName = name;
this.ParamId = id;
this.Datatype = dt;
this.ReadWrite = rw;
}
}
这样,您可以像这样初始化数组:
Parameters.Param = new Parameter[]
{ new Parameter("RevProtocol", 0x0001, DataType.Uint16, ReadWriteState.ReadOnly),
new Parameter("HwProtocol", 0x0002, DataType.Uint16, ReadWriteState.ReadOnly)};