我在一堆数据模型上有一个抽象类,用于执行一些数据库更新/插入类型工作(将复杂结构 - 用户及其设置的部分 - 从一个数据库导入到另一个数据库)。
似乎我不能使用this
对T中的项目进行任何工作。我原以为我可以这样做。相反,似乎我需要使方法静态并传入T类型的对象。
public abstract class AImportItemListDatabaseCalls<T, T2>
where T : IImportListBase<T2>, IImportListDatabaseCalls<T2>
where T2 : IImportItem
{
public static bool ProcessListToDestination(T DataListModel, SqlConnection connection, SqlTransaction tran)
{
foreach (T2 item in DataListModel.ImportItems)
{
if (item.IsPaired) // Do, Do Not Insert work - different by T
{
if (!DataListModel.DestinationDoNotInsert(item, connection, tran))
{
//
}
}
else // Do, Insert work - different by T
{
if (!DataListModel.DestinationInsertInto(item, connection, tran))
{
//
}
}
}
return true;
}
}
编辑:我想做什么
public abstract class AImportItemListDatabaseCalls<T, T2>
where T : IImportListBase<T2>, IImportListDatabaseCalls<T2>
where T2 : IImportItem
{
public bool ProcessListToDestination( SqlConnection connection, SqlTransaction tran)
{
foreach (T2 item in ImportItems)
{
if (item.IsPaired) // Do, Do Not Insert work - different by T
{
if (!DestinationDoNotInsert(item, connection, tran))
{
//
}
}
else // Do, Insert work - different by T
{
if (!DestinationInsertInto(item, connection, tran))
{
//
}
}
}
return true;
}
}
解决方案:
public abstract class AImportItemListDatabaseCalls< T2> : IImportListBase<T2>, IImportListDatabaseCalls<T2>
where T2 : IImportItem
{
public abstract List<T2> ImportItems { get; set; }
public abstract bool DestinationInsertInto(T2 item, SqlConnection connection, SqlTransaction tran);
public abstract bool DestinationDoNotInsert(T2 item, SqlConnection connection, SqlTransaction tran);
public bool ProcessListToDestination( SqlConnection connection, SqlTransaction tran)
{
foreach (T2 item in ImportItems)
{
if (item.IsPaired) // Do, Do Not Insert work - different by T
{
if (!DestinationDoNotInsert(item, connection, tran))
{
//
}
}
else // Do, Insert work - different by T
{
if (!DestinationInsertInto(item, connection, tran))
{
//
}
}
}
return true;
}
}
答案 0 :(得分:2)
似乎我不能用这个。对T
中的项目进行任何处理
当然不是。 T中有哪些项目? AImportItemListDatabaseCalls
不包含 T或T2。它只有那些可用的类型(不是那些类型的对象)。
你可能想做这样的事情:
public abstract class AImportItemListDatabaseCalls<T2> :
ImportListBase<T2>, IImportListDatabaseCalls<T2>
where T2 : IImportItem
现在有一个基于T2的基类。那么你可以使用this.