c#类的实例
本文关键字:实例 | 更新日期: 2023-09-27 18:02:32
我对c#编程很陌生,所以很抱歉有愚蠢的问题。
我设置了DeviceInfos
类,我喜欢在每个循环中使用它。所以最后我想有很多"相同"的类,有多少是"点头"。
我很好地定义了我的DeviceInfos
类的新实例,但没有"索引支持":)如何解决这个问题?
我的公共类deviceinfo:
public class DeviceInfos
{
public bool boolSerialNumber;
public byte[] byteSerialNumber;
public string stringSerialNumber;
public bool boolManufacturer;
public byte[] byteManufacturer;
public string stringManufacturer;
public bool boolProduct;
public byte[] byteProduct;
public string stringProduct;
public HidDeviceData.ReadStatus ReadStatus { get; set; }
public bool boolWriteNameSuccess;
public bool boolReadNameSuccess;
public string stringName;
和出错代码:
DeviceInfos _deviceInfo = new DeviceInfos();
for (nod = 0; nod < _deviceList.Length; nod++)
{
_deviceInfo[nod].boolSomething= false;
_deviceInfo[nod].boolSomething = _deviceList[nod].ReadSerialNumber(out _deviceInfo[nod].byteSerialNumber);
...
Error Error:一个未处理的System类型异常。
USBmiddlewareDeveloping.exe中出现NullReferenceException发生在
_deviceInfo[nod].boolSerialNumber = false;
为什么?或者怎么做?
显然你需要声明一个结构体数组:
DeviceInfos[] _deviceInfos = new DeviceInfos[_deviceList.Length];
for (nod = 0; nod < _deviceList.Length; nod++)
{
_deviceInfos[nod] = new DeviceInfos();
_deviceInfo[nod].boolSomething= false;
...
并且考虑将你的结构重命名为DeviceInfo
,如果它只代表一个设备。此外,正如已经评论的那样,考虑将其作为一个类,而不是一个结构体。
正如D . Stanley所建议的,类可能就是您所需要的。该语言有几个内置的可枚举类,如List
var deviceInfos = new List<DeviceInfo>();
for(var nod = 0; nod < deviceInfos.Count; nod++)
{
var deviceInfo = deviceInfos[nod];
byte[] byteSerialNumber;
deviceInfo.boolSomething = deviceInfo.ReadSerialNumber(out byteSerialNumber);
deviceInfo.byteSerialNumber = byteSerialNumber;
}
你的问题很模糊;如果你想从列表中创建一个数组你可以使用Linq:
DeviceInfo[] _deviceInfo = _deviceList // <- source
.Select(item => new DeviceInfo() { // <- data representation
boolSomething = false,
someOther = item.someOtherData,
...
})
.ToArray(); // <- finally to array
如果你的结构需要索引支持,看看这个:https://msdn.microsoft.com/en-us/library/2549tw02.aspx
在你的结构中,类似于:
public YourType this[int index]
{
get
{
return yourList[index];
}
set
{
yourList[index] = value;
}
}