将DataRow转换为强类型DataRow:他们是如何做到的
本文关键字:DataRow 何做 他们是 转换 强类型 | 更新日期: 2023-09-27 18:16:16
我正在尝试制作一些强类型datarow的轻量级版本,以便为采用IEnumerable<T> where T : DataRow
的方法编写测试。
我想做一个类,从DataRow
继承,但有额外的属性,如在自动生成的强类型DataSet.Designer.cs。我不能让他们的代码工作,事实上,我不明白它如何能工作:
// from AnimalDataSet.Designer.cs:
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
public AnimalRow AddAnimalRow(
string Name,
int Species_ID) {
AnimalRow rowAnimalRow = ((AnimalRow)(this.NewRow()));
object[] columnValuesArray = new object[] {
null,
Name,
Species_ID};
rowAnimalRow.ItemArray = columnValuesArray;
this.Rows.Add(rowAnimalRow);
return rowAnimalRow;
}
每次我试图运行这个模仿-我得到InvalidCastException(无法转换系统类型的对象)。DataRow转换为AnimalRow类型)。如我所料。
那么是什么让他们的代码更特别呢?
感谢@Marc Gravell把事情引向了正确的方向:
AnimalDataTable
类包含对DataTable
未记录的*虚方法的两个重写:
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
protected override global::System.Data.DataRow NewRowFromBuilder(global::System.Data.DataRowBuilder builder) {
return new AnimalRow(builder);
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
protected override global::System.Type GetRowType() {
return typeof(AnimalRow);
}
* <子>大部分无证子>