我有以下继承自DataTable的类:
public class ExcelStaticDataTable : DataTable
{
public List<ExcelStaticDataTable> SubTables { get; set; }
public ExcelStaticDataTable(string tableName): base(tableName)
{
SubTables = new List<ExcelStaticDataTable>();
}
}
Run Code Online (Sandbox Code Playgroud)
你知道为什么我在MissingMethodException执行以下操作时获得"为此对象定义的无参数构造函数":
ExcelStaticDataTable table=new ExcelStaticDataTable("table1");
table.Clone();
Run Code Online (Sandbox Code Playgroud)
这两段代码都在不同的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
Run Code Online (Sandbox Code Playgroud)
谢谢.
我怀疑其他代码使用object newObj = Activator.CreateInstance(GetType());作为的一部分Clone().这需要默认用法中的公共无参数构造函数.否则它抛出一个MissingMethodException.
更新:显示堆栈跟踪的更新确认了这一点.
我怀疑你可以通过覆盖CreateInstance方法来解决这个问题:
protected override DataTable CreateInstance()
{
return new ExcelStaticDataTable(TableName);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
873 次 |
| 最近记录: |