2013-08-08 5 views
0

저는 tcp/ip를 사용하여 통신 시스템을 구축하고 있습니다. .NET, C# 및 VS2012를 사용하고 있습니다.C# 일반 유형 및 실제 유형 연결

이러한 시스템은 메타 데이터를 교환합니다. 기본 메시지에는 메타 데이터 이름과 값 (데이터 자체)이 포함됩니다. 한 시스템이 다른 시스템 데이터 유형을 알지 못합니다.

메시지의 구조는 FromNode, ToNode, MetadataName, MetadataType, MetadataSizeInBytes, MetadataValue입니다. 모든 메시지는 분리 된 필드가있는 순수 바이트 []입니다 (일부 시스템은 유닉스 맛이있을 수 있기 때문에 직렬화되지 않음).

해당 메시지를받을 때 유형에 따라 실제 변수에 메타 데이터를 연결하려고합니다. 그래서 나는 다음과 같은 클래스 내장 :

공용 클래스 RealMetadata을

나중에 코드에
{ 
     public string Type { get; set; } 
     public Type Value { get; set; } <<--- I´ve tried var and object, with no success. 
} 

나는 메타 데이터의 실제 값에 액세스 싶어 :

if (Type == "INTEGER") 
     int RealValue = (int) Value; 
if (Type == "STRING") 
     string RealValue; 
     Buffer.Blockcopy (RealValue, 0, Value, 0, MetadataSizeInValues * sizeof (char)); 
if (Type == "FLOAT") 
     float RealValue = (float) Value; 

이 모든 것은 때때로 컴파일하지는 또는 아무튼 런타임에는 작동하지 않습니다. 클래스 프로퍼티에 어떤 타입의 Value가 선언되어야하는지, 그리고 그 데이터를 실제 변수로 가져 오는 방법을 정확히 알지 못합니다.

아이디어 나 제안에 감사드립니다.

Rds의

답변

1

당신해야, 데이터의 종류가 저장 개최 울부 짖는 소리처럼하는 데이터를 보유하는 객체와 타입 객체를 사용하여 수 :

public Type Type { get; set; } 
    public Object Value { get; set; } 


     if (Type == typeof (int)) 
     { 
      int realValue = (int) Value; 
     } 
     if (Type == typeof(string)) 
     { 
      string RealValue; 
      Buffer.Blockcopy(RealValue, 0, Value, 0, MetadataSizeInValues*sizeof (char)); 
     } 
     if (Type == typeof(float)) 
     { 
      float RealValue = (float) Value; 
     } 
+0

는 예, String로서 형태를 유지 (int) 값으로 형변환하면 런타임시 오류가 발생했습니다. Object를 이미 시도했습니다. 나는 새로운 시도를 할 것이다. – Cox