2014-06-19 3 views
2

VMS 시스템을 읽고 동적 유형의 배열을 반환하는 COM이 있습니다. 내가 유형을 검사 할 때 Visual Studio에서동적 유형 배열을 반복하는 방법

그것은 보여줍니다

var lines = myApp.GetScreenLines(); 
foreach(var line in lines) 
{ 
    //Do something 
} 

하지만 예외가 계속 :

수 없습니다로를

dynamic {object[]} 

그래서 나는 다음과 같은 시도 ' System.Object[*]'유형의 캐스트 오브젝트를 입력하여 ' System.Object[]'을 입력하십시오.

그러나 내가 lines을 검사하면 일반 배열처럼 표시되며 데이터를보기 위해 확장 할 수도 있습니다.

누구든지이 동적 배열 데이터 형식을 문자열 형식으로 변환 할 수있는 방법을 알고 있습니까?

나는 중복 링크에서 솔루션을 시도했지만 배열에 대한 정보를 알고 있다고 가정 할 때 작동하지 않습니다. 하지만 동적으로 나는 런타임까지 아무 것도 모릅니다. 따라서 배열의 상한 또는 하한을 얻을 수 없습니다.

추신 : 나는 무엇을 통제 할 수 없다. myApp.GetScreenLines(); COM API로 반환합니다.

편집 :

해결 방법을 제공해도 문제가 해결되지 않습니다. 나는 둘 다 시도했다. 첫 번째 시도

필자는

이었다

이 예외 야기
Array sourceArray = myWinFormsApp.GetScreenLines(); 
    if (sourceArray.Rank != 1) 
    throw new InvalidOperationException("Expected a single-rank array."); 

    object[] newArray2 = new object[sourceArray.Length]; 
    Array.Copy(sourceArray, sourceArray.GetLowerBound(0), 
         newArray2, 0, sourceArray.Length); 

'은 System.Object [] "입력 타입"[*]은 System.Object를'객체를 전송할 수 없음. 내가 시도

두 번째였다 :

object[] newArray = myWinFormsApp.GetScreenLines().Cast<object>().ToArray(); 

하는 나는 예외를 얻으려면 'System.Array는'

그래서 나는이 질문에 A를 고려 해달라고 '캐스트'에 대한 정의가 포함되어 있지 않습니다 필자 내가 비주얼 스튜디오의 "시계"도구를 사용하여 배열을 볼 수 있습니다 설명한 바와 같이, 중복,하지만 난 그것을

+0

'foreach (동적 라인 인라인)'를 사용해 보셨습니까? –

+0

또한 "복제"작업의 솔루션도 없습니다. COM에서 반환되는 것은 내가 제어 할 수없는 동적 인 값입니다. – Festivejelly

+0

OP와 동일한 문제가있어서 링크 된 "답변"의 솔루션이 동적으로 작동하지 않습니다. 그러나 링크 된 답변에서 RoadBump의 게시물을 찾으십시오. 객체를 통해 Array로 double cast해야합니다. 그러면 반복하기가 쉽습니다. – Marty

답변

0

동적 대신 VAR의 사용 시도를 반복하는 것 캔트

var lines = myApp.GetScreenLines(); 
foreach(dynamic line in lines) 
{ 
    //Do something 
} 
+0

이 예외가 발생했습니다 : 형식 'System.Object [*]'형식의 개체를 'System.Object []'형식으로 캐스팅 할 수 없습니다. – Festivejelly

관련 문제