全部,我很难将struct
传递给类构造函数。我正在多线程化现有代码的一部分。在一个类中定义了以下结构:
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
的每个组件,但我想避免这种情况。
感谢您的时间。
答案 0 :(得分:2)
你总是可以传递一个对象数组object [],你可以在里面包装任何类型的结构或类,因为装箱/拆箱副作用,所以不建议使用它。我的意思是:
new ExecCmdsThredded(new object[] { new SchemaFileRec(), new AnotherSchema() });
但我建议删除结构,创建类以便使用Generics
代替,使代码至少更具可读性。
答案 1 :(得分:1)
每当我开始传递结构时,我都会感到不舒服。当你想要作为参数传递的结构集合时,请仔细重新审视设计......“为什么我使用结构?”我建议将结构转换为大多数情况下的类。
有几个链接可帮助您决定是使用结构还是类。搜索StackOverflow和MSDN