2016-05-16 63 views
0

一大塊,我需要一個類來幫助我訪問的內存塊類來幫助訪問的內存

到目前爲止,我有這個

class ABSet 
{ 
    private byte[] _raw; 
    public ABSet(byte[] RawData) 
    { 
     _raw=RawData; 
    } 
    public double A 
    { 
     get 
     { 
      return BitConverter.ToDouble(_raw, 2); 
     } 
    } 
    public double B 
    { 
     get 
     { 
      return BitConverter.ToDouble(_raw, 10); 
     } 
    } 
} 

現在我想這樣做

class ABSetCollection 
{ 
    private byte[] _raw; 
    public ABSetCollcetion(byte[] RawData) 
    { 
     _raw=RawData; 
    } 
    public ABSet this[int index] 
    { 
     get 
     { 
      // This Part Is What I Want To Figure Out 
     } 
    } 
} 

我知道我可以把return new ABSet(_raw);,但我覺得必須有一個解決方案,需要較少的動態分配。

P.S.我想使用屬性的原因是因爲我在我的GUI中綁定到它們。

+0

使用'List '有什麼問題? –

+0

只是覺得它有很多存儲開銷。我試圖想出一個只需要一個'ABSet'實例的解決方案。 – MDK

+0

爲什麼不簡單並將索引器添加到'ABSet'? –

回答

0

而不是僅僅接受一個字節數組,而是改變它,所以你也得到一個偏移量。然後你就可以得到這個工作。

class ABSet 
{ 
    public const int ABSetSize = 20; // or whatever the size 

    private readonly byte[] _data; 
    private readonly int _offset; 
    public ABSet(byte[] data, int offset = 0) 
    { 
     _data = data; 
     _offset = offset; 
    } 

    const int AOffset = 2; 
    public double A => BitConverter.ToDouble(_data, _offset + AOffset); 

    const int BOffset = 10; 
    public double B => BitConverter.ToDouble(_data, _offset + BOffset); 
} 

class ABSetCollection 
{ 
    private readonly byte[] _data; 
    private readonly int _offset; 
    public ABSetCollection(byte[] data, int offset = 0) 
    { 
     _data = data; 
     _offset = offset; 
    } 

    public ABSet this[int index] => new ABSet(_data, _offset + index * ABSet.ABSetSize); 
} 
+0

另一方面,通過將它映射到具有明確佈局的結構,可以節省大量時間。 –