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를 고려 해달라고 '캐스트'에 대한 정의가 포함되어 있지 않습니다 필자 내가 비주얼 스튜디오의 "시계"도구를 사용하여 배열을 볼 수 있습니다 설명한 바와 같이, 중복,하지만 난 그것을
'foreach (동적 라인 인라인)'를 사용해 보셨습니까? –
또한 "복제"작업의 솔루션도 없습니다. COM에서 반환되는 것은 내가 제어 할 수없는 동적 인 값입니다. – Festivejelly
OP와 동일한 문제가있어서 링크 된 "답변"의 솔루션이 동적으로 작동하지 않습니다. 그러나 링크 된 답변에서 RoadBump의 게시물을 찾으십시오. 객체를 통해 Array로 double cast해야합니다. 그러면 반복하기가 쉽습니다. – Marty