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;

为什么?或者怎么做?

c#类的实例

显然你需要声明一个结构体数组:

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() (T是对象的通用表示,例如DeviceInfo类)。List是我个人最喜欢的;我更喜欢列表,因为它的LINQ函数和添加和删除对象的能力很容易。你可以输入:

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;
            }
        }