2014-09-12 2 views
0

구조체의 필드에 대해 필드 정보가 반영된 방법을 찾으려고합니다. 내 구조체는 종종 고정 너비 바이트 배열을 포함합니다. 구조체 필드 목록을 반복하면서 이러한 배열 중 하나가 발생하면 필드가 배열이고 다른 필드 형식과 다르게 배열을 처리해야합니다. 어떻게해야합니까?구조체에 고정 너비 byte [] 필드 정보를 반영하려면 어떻게해야합니까?

예를 들어, 여기에 예제 구조체 및 다음 메서드를 내 문제를 분명히?

[StructLayout(LayoutKind.Sequential, Pack = 1)] 
public unsafe struct MyStruct 
{ 
    public int IntegerVal; 
    public unsafe fixed byte MyByteBuff[20]; 
} 


//Later in code... 
public static void WorkWithStructs(Type t) //t will always be a struct 
{ 
    foreach (var f in t.GetFields()) 
    { 
     if (f.FieldType == typeof(int) 
     { 
      //Do Int work 
     } 
     else if (???) //Test for a fixed-width byte array 
     { 
      // If MyStruct were passed to this method, this is where I 
      // would need to handle the MyByteBuff field. Specifically, 
      // I need to discern the object type (in this case a byte) 
      // as well as the length in bytes. 
     } 
    } 
} 
+0

이러한 고정 된 필드를 리플렉션을 통해 일반적인 방법으로 처리 할 수 ​​없다면 너무 놀랍지 않을 것입니다. 어쨌든 가장 좋은 방법은 응용 프로그램을 디버그하고 디버거에서'f'와 그 속성을 살펴 보는 것입니다. –

+0

있습니다. 나는 아마도 그러한 분야 일 가능성이있는 분별있는 것에 가까워 질 수 있지만 필요한 모든 정보를 찾을 수는 없습니다. 나는이 요구 사항보다 훨씬 전에 반사를 사용하지 않았다. 바라건대 '전문가'가 도와 줄 수 있기를 바랍니다. – RLH

답변

2
당신은 유형의 CustomAttributes 모음에있는 당신의 필드 유형에 FixedBufferAttribute 사용자 지정 특성의 존재 (를 확인할 수 있습니다

.

귀하의 경우에는

을, 당신은의 존재를 확인 할 수 일치하는 속성 다음.

[FixedBufferAttribute(typeof(Byte), 20)] 

합니다 (FixedBufferAttribute를 추가하는 것은 자동으로 수행됩니다 - 수동으로 추가하려고하면, 당신은 fixed 키워드를 대신 사용 할 수 없다는 오류를 얻을 것이다)

관련 문제