David DB
asked on
Making a method more generic with T and interface
Hi.
I have a method in C# that I would like to be more generic.
The IType interface is a collection of Orders, Customers and Products classes.
PS: The reason for using the Interface is to restrict the T types. If there is a better way, please let me know.
The class structure on the top is the same, except for the property Orders. It's called Customers in Customers, and Products in Products. So the data.Orders.Edges will be data.Customers.Edges for Customers, and data.Products.Edges for Products.
So the name after data is the only thing that will change in this method. The rest is the same (Edges, PageInfo etc)
How can I accomplish this so that it can be used for Orders, Customers and Products?
I know about checking if T is Orders, Customers or Products.
I have a method in C# that I would like to be more generic.
public List<T> Test<T>(DateTimeOffset afterDate) where T:IType
{
string afterCursor = null;
T data;
bool morePages = false;
List<T> retData = new List<T>();
do
{
data = GetData<T>(afterCursor);
if (data != null)
{
foreach (var item in data.Orders.Edges)
{
afterCursor = item.Cursor;
retData.Add(item.Node);
}
morePages = data.Orders.PageInfo.HasNextPage;
}
else return null;
} while (morePages);
return retData;
}
The IType interface is a collection of Orders, Customers and Products classes.
PS: The reason for using the Interface is to restrict the T types. If there is a better way, please let me know.
The class structure on the top is the same, except for the property Orders. It's called Customers in Customers, and Products in Products. So the data.Orders.Edges will be data.Customers.Edges for Customers, and data.Products.Edges for Products.
So the name after data is the only thing that will change in this method. The rest is the same (Edges, PageInfo etc)
How can I accomplish this so that it can be used for Orders, Customers and Products?
I know about checking if T is Orders, Customers or Products.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.