C#返回不同的对象并使用它

时间:2018-08-10 08:44:54

标签: c# dapper

我陷入一个问题。 我有一种查询表的方法。我有代表表的类,所有类均来自接口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?
    }
}

2 个答案:

答案 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接口的所有类型都是可以调用的。