1

我正在尝试制作一些强类型 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 类型)。正如我所预料的那样。

那么是什么让他们的代码更特别呢?

4

1 回答 1

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);
}

*大部分无证

于 2011-11-30T08:30:30.347 回答