모두이 클래스 생성자에 struct
을 전달하는 데 어려움이 있습니다. 나는 기존 코드의 일부를 멀티 스레딩하는 과정에있다. 한 클래스의 다음 구조가 정의된다구조체의 배열을 C#의 클래스에 전달하는 방법
SchemaFileRec[] m_TableList;
struct SchemaFileRec
{
public ArrayList saFile;
public ArrayList saImpTab;
public ArrayList saSheet;
// And others...
public int[] nColHead;
public int[] nSkipBeg;
public int[] nSkipEnd;
public string strADTFld;
};
이 방법에 사용되는 몇 가지 처리를 수행하도록 (구 ExecCmd
방법이라고 함). 나는이 방법을 수업에 다시 쓰고있다. 실제로 하위 클래스는 BackgroundWorker
입니다. 근본적으로 나는 "장기 실행"작업을 다루는 방법을 사용하고 있으며,이를 여러 번 발생시킨다.
public class ExecCmdsThredded : BackgroundWorker
{
// Global variables and constants.
private int nTable;
private List<int> kPrmArray = null;
private List<object> StructureArray = null;
private SpreadsheetGear.IWorksheet worksheet;
// Default constructor to handle thred properties.
public ExecCmdsThredded()
{
WorkerReportsProgress = true;
WorkerSupportsCancellation = true;
}
// Constructor to parse relevant parameters to worker.
// Or as an array of objects public ExecCmdsThredded(object[] _StructArr, etc.
public ExecCmdsThredded(List<object> _StructArr, List<int> _kPrmArr, ArrayList[] _saCmd,
int _nTable, SpreadsheetGear.IWorksheet _worksheet) : this()
{
this.nTable = _nTable;
this.kPrmArray = _kPrmArr;
this.StructureArray = _StructArr;
this.worksheet = _worksheet;
}
// ...
내가 지금 생성자를 통해 ExecCmdsThredded
클래스에 위에서 구조를 전달하려는하지만 내가 전에이 작업을 수행 할 수 없었으며 그것이 내가 그것을 원하는 방식으로 가능하면 나는 확실하지 않다 : 내가 가진 ? 나는 분명히 struct
의 모든 구성 요소를 통과시킬 수 있지만 이것을 피하고 싶습니다.
감사합니다.
"구문 분석"대신 "전달"을 의미합니다. public ExecCmdsThredded (SchemaFileRec [] schemaFileRecs)와 같은 클래스 생성자에 구조체 배열을 전달하는 방법을 묻고 있습니까? –
나는 사과를 건네는 것을 의미한다 (좋은 날은 아니었다). 예, 제가하고 싶은 것입니다. 하지만 클래스에 전달되는 내용이 변경 될 수 있으므로 여러 가지 'structs'를 하나의 객체 배열로 전달하고자하므로 생성자의 일반 컨테이너 여야합니다. – MoonKnight
당신은 항상 객체'object []'의 배열을 전달할 수 있으며 box 내부에 어떤 유형의 구조체 나 클래스도 가질 수 있습니다. boxing/unboxing 부작용으로 인해 알려지지 않습니다. 무슨 뜻인지 예 :'new ExecCmdsThredded (new object [] {new SchemaFileRec (new, AnotherSchema()}));'하지만 구조체를 없애고 대신 Generics를 사용할 수 있도록 클래스를 생성하여 코드를 읽기 쉽게 만듭니다. 적어도. –