我正在尝试制作一些强类型DataRows的轻量级版本,以便为需要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(无法将System.DataRow类型的对象强制转换为类型AnimalRow)。正如我所料。
那么是什么让他们的代码更加特殊?
答案 0 :(得分:3)
感谢@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);
}
* <子> mostly undocumented 子>