2017-12-08 21 views
1

solidWorks 용 C# 프로젝트에 너무 익숙해졌습니다. 이 out System.Arraystring[]으로 변환해야합니다. 그런 다음 해당 문자열이 호출되어 out System.Array에서 out EdmLib.EdmBatchError2[]으로 변환됩니다.solidworks 플러그인을위한 out system.Array 변환 문제 C#

TLDR : out System.Array '부터 string[].

코드 :

private void GetSerialNumberGenerators() 
{ 
    IEdmSerNoGen7 utility = this.m_vault.CreateUtility(EdmUtility.EdmUtil_SerNoGen) as IEdmSerNoGen7; 
    Array ppoRetNames = Array.CreateInstance(typeof(string[]), 0); 
    utility.GetSerialNumberNames(out ppoRetNames); 
    this.comboBoxSerialNumber.DataSource = (object) ppoRetNames; 
} 
는 심각도 코드 설명 프로젝트 파일 라인 억제 상태 오류 CS1503 인수 1

를 '밖으로 문자열 []'를 'System.Array 밖으로'에서 변환 할 수 없습니다

+2

왜 Array.CreateInstance (typeof (string []), 0);를 사용 하는가? 배열을 선언하는 방법을 모르십니까? 간단합니다 :'string [] ppoRetNames;'. 'GetSerialNumberNames'가 그것을 초기화 할 것이기 때문에 ('out' 매개 변수) 필요가 없습니다. –

답변

0

그것은 간단하다 as

string[] ppoRetNames; 
GetSerialNumberNames(out ppoRetNames); 

이렇게하면 string[]을 선언 할 수 있습니다. GetSerialNumberNames이 수행하므로 초기화하지 마십시오 (out-parameter). Array.CreateInstance을 사용할 필요가 없습니다.

typeof(string[])이 아닌 typeof(string)을 전달하기 때문에 지그재그 형 배열을 만드는 것과는 별개입니다. 이 올바른 것, 그래서 당신은 한 차원 배열이 필요합니다

Array someArray = Array.CreateInstance(typeof(string), 0); 
string[] ppoRetNames = (string[])someArray; // so a cast is what was missing 
0

GetSerialNumberNames 4 개 INT의 구조는 타입 EdmBatchError2의 System.Array 반환, 그래서 나는 그 [문자열로 캐스팅 할 방법을 모른다 ]를 의미있는 의미로 사용합니다. 여기에 내가하는 일이있다 :

utility.GetSerialNumberNames(out Array ppoRetNames); 
foreach(EdmBatchError2 batchError in ppoRetNames) { 
    // construct error message with below variables for each error 
    //batchError.mlFileID; 
    //batchError.mlFolderID; 
    //batchError.mlVariableID; 
    //batchError.mlErrorCode; 
}