【发布时间】:2015-06-24 07:17:46
【问题描述】:
我有以下实现,可用于将DataTable 中的行转换为List<T>。 IDataItem 接口只包含 SetData 方法,该方法接受单个 DataRow 对象。
public class GroupedData<T> : List<T> where T : IDataItem, new()
{
public GroupedData(DataTable table)
{
for (int i = 0; i < table.Rows.Count; i++)
{
DataRow row = table.Rows[i];
var newItem = new T();
newItem.SetData(row);
Add(newItem);
}
}
}
这些是我试图为其赋值的类中的属性:
public class Details
{
public List<AuditData> AuditEntries { get; set; }
public AuditMethodSummaryData AuditMethodSummaryData { get; set; }
}
使用 GroupedData 类,我可以执行以下操作来填充 AuditEntries:
var returnData = new Details();
returnData.AuditEntries = new GroupedData<AuditData>(dataSet.Tables[TableNames.AuditDetails]);
对于第二个属性 AuditMethodSummaryData。我需要分配一个对象而不是一个列表。我不知道如何创建另一个可以执行该功能的类。
注意 - 我仍然需要传入一个 DataTable。但是,数据表将永远只包含一行(由于系统的工作方式)。
我想出的唯一解决方案如下。我就是想看看有没有更好的解决方案:
public class SingleData
{
public static T GetItem<T>(DataTable table) where T : IDataItem, new()
{
if (table.Rows.Count >= 1)
{
DataRow row = table.Rows[0];
var newItem = new T();
newItem.SetData(row);
}
}
}
我不喜欢的是我将约束从类移到了方法上。有没有办法让我在课堂上保留它?避免使用静态方法。
【问题讨论】:
-
使用泛型方法代替类有什么问题?我只能看到好处,真的......
-
@Luaan 这是一个公平的观点。这也是我坚持生产代码的原因。谢谢。
标签: c# oop generics type-constraints