2017-11-07 45 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