2017-11-07 15 views
3

コードベースのパフォーマンス/メモリにとって重要なデータ構造を試しています。構造体で定義されているバイトにすばやくアクセスしたいと思います。しかし、インデクサーを使用して操作している構造にアクセスする方法がわかりません。C#でインデクサーを使用して "this"ポインタ/参照にアクセスする

[Serializable] 
[StructLayout(LayoutKind.Sequential)] 
public struct Foo 
{ 
    [SerializeField] 
    private byte a, b, c; 

    public unsafe byte this[byte index] 
    { 
     get 
     {  
      //omitted safety checks 

      //this is a no, no 
      byte* addr = (byte*)&this; 

      return addr[index]; 
     } 
    } 
} 

答えて

5

私はそれをしようとしたときにのみ、すなわち、あなたがfixedブロック内で何をしようとして行うことができます。:

fixed (Foo* foo = &this) 
{ 
    byte* addr = (byte*)foo; 
    return addr[index]; 
} 
+0

をはい、私は、構文が間違っを得ました。チャームのような作品!ありがとうございました! – Kraken

+0

私はこれのパフォーマンス上の利点を理解していません。 – ventiseis

+0

これは私が測定したいものです:]。また、標準のバイト配列を使用した場合、メモリ内のサイズは上記のコードよりも大きくなります。 – Kraken

関連する問題