如何在C#中将一个Struct数组传递给类

时间:2011-10-24 16:23:31

标签: c# multithreading struct

全部,我很难将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的每个组件,但我想避免这种情况。

感谢您的时间。

2 个答案:

答案 0 :(得分:2)

你总是可以传递一个对象数组object [],你可以在里面包装任何类型的结构或类,因为装箱/拆箱副作用,所以不建议使用它。我的意思是:

new ExecCmdsThredded(new object[] { new SchemaFileRec(), new AnotherSchema() });

但我建议删除结构,创建类以便使用Generics代替,使代码至少更具可读性。

答案 1 :(得分:1)

每当我开始传递结构时,我都会感到不舒服。当你想要作为参数传递的结构集合时,请仔细重新审视设计......“为什么我使用结构?”我建议将结构转换为大多数情况下的类。

有几个链接可帮助您决定是使用结构还是类。搜索StackOverflowMSDN