我陷入一个问题。
我有一种查询表的方法。我有代表表的类,所有类均来自接口ITable
。该方法返回IEnumerable<ITable>
。但是我不能使用return给出的对象,这就是我的意思:
public interface ITable
{
}
public class table1 : ITable
{
prop1 {get;set;}
}
public class table2 : ITable
{
prop2 {get; set;}
}
public IEnumerable<ITable> GetInfo(string table)
{
switch(table)
{
case "Table1":
var dataTable1 = connection.Query<Table1> ....
return dataTable1;
case "Table2":
var dataTable2 = connection.Query<Table2> ....
return dataTable2;
}
}
static void Main(string[] args)
{
foreach (var table in listOfTable)
{
var data = GetInfo(table);
//data here is "Table" how can i make the mthod to return my Table1 or Table2?
}
}
答案 0 :(得分:1)
如果您需要了解特定类型,那么可能可能没有充分利用接口,但是:您可以执行以下操作:
var data = GetInfo(table);
foreach(var item in data)
{
if (item is table1 t1) { /* special code for table1, now held as t1 */ }
else if (item is table2 t2) { /* special code for table2, now held as t2 */ }
else {/* general code for ITable */ }
}
强调:通常应该避免了解这种情况下的特定类型。这意味着您实际上并未在对该接口进行编码。
答案 1 :(得分:0)
我猜您正在寻找一种查询数据库的通用方法,因此您可以将GetInfo
方法更改为限制为ITable
的类型,然后只返回该数据,以便您的使用者可以使用现在将被强类型化的返回数据,例如
public IEnumerable<TTableType> GetInfo<TTableType>() where TTableType: ITable {
return Connection.Query<TTableType>();
}
这对于实现ITable
接口的所有类型都是可以调用的。