3

我有以下从 DataTable 继承的类:

public class ExcelStaticDataTable : DataTable
{
    public List<ExcelStaticDataTable> SubTables { get; set; }
    public ExcelStaticDataTable(string tableName): base(tableName)
    {
        SubTables = new List<ExcelStaticDataTable>();
    }
}

当我执行以下操作时,您知道为什么我得到MissingMethodException“为该对象定义的无参数构造函数”:

ExcelStaticDataTable table=new ExcelStaticDataTable("table1");
table.Clone();

这两段代码都在不同的dll中,只是为了澄清。这里是堆栈跟踪:

at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
   at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
   at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
   at System.Activator.CreateInstance(Type type, Boolean nonPublic)
   at System.Data.DataTable.CreateInstance()
   at System.Data.DataTable.Clone(DataSet cloneDS)
   at System.Data.DataTable.Clone()
   at System.Data.DataTable.Copy()
   at ..........cs:line 35

谢谢。

4

1 回答 1

6

我怀疑其他代码正在object newObj = Activator.CreateInstance(GetType());用作Clone(). 这需要在默认用法中使用公共无参数构造函数。否则它会抛出一个MissingMethodException.

更新:您显示堆栈跟踪的更新证实了这一点。

我怀疑您可以通过覆盖该CreateInstance方法来解决此问题:

protected override DataTable CreateInstance()
{
    return new ExcelStaticDataTable(TableName);
}
于 2013-01-15T14:37:40.810 回答