我想知道是否有人可以帮助我,我在C#中有两个List T
,除了一个拥有客户和一个拥有供应商之外,它们是相同的。我试图将这些列表中的每一个都传递给函数,但没有成功,以避免有额外的代码。
下面列出的列表:
var customers = IntuitServiceConfig.ServiceManager.FindAll<Customer>(new Customer(), 1, 500);
var vendor = IntuitServiceConfig.ServiceManager.FindAll<Vendor>(new Vendor(), 1, 500);
我想传入下面的函数:
public static string Contacts(AppContext ctx, List<Type1> list )
{
foreach (var contact in list)
{
// do some db work
}
}
答案 0 :(得分:3)
如果您希望/可以为这两个类使用相同的代码(Customer
,Vendor
),请将Contacts
函数更改为通用
public static string Contacts<TContact>(AppContext ctx, List<TContact> list )
{
foreach (var contact in list)
{
// do some db work
}
}
然后像这样使用:
List<Customer> customers = IntuitServiceConfig.ServiceManager.FindAll(new Customer(), 1, 500).ToList();
List<Vendor> vendors = IntuitServiceConfig.ServiceManager.FindAll(new Vendor(), 1, 500).ToList();
String cust = Contacts<Customer>(ctx, customers);
String vend = Contacts<Vendor>(ctx, vendors);
<强>更新强>
如果您的Vendor
和Customer
类不同,不是从相同的基类派生的,或者没有实现相同的接口,那么您需要为每个类编写自己的函数
public static string Contacts(AppContext ctx, List<Customer> list )
{
foreach (var contact in list)
{
// do some db work with customers
}
}
public static string Contacts(AppContext ctx, List<Vendor> list )
{
foreach (var contact in list)
{
// do some db work with vendors
}
}
使用:
String cust = Contacts(ctx, customers);
String vend = Contacts(ctx, vendors);
答案 1 :(得分:2)
您可以尝试将该方法设为通用:
public static string Contacts<TElement>(AppContext ctx, List<TElement> list )
{
foreach (TElement element in list)
{
// do some db work
}
}
<强>更新强>
您需要让两个对象实现相同的接口(或者,从相同的基类派生)。您可以创建一个IContact
界面,如下所示:
interface IContact
{
int Id { get; set; }
// other common properites
}
...修改这样的联系人类:
class Customer : IContact
{
// rest of Customer definition
}
class Vendor : IContact
{
// rest of Vendor definition
}
...然后更改方法如下:
public static string Contacts<TContact>(AppContext ctx, List<TContact> list )
where TContact : IContact
{
foreach (TContact element in list)
{
// do some db work
}
}
......或只是:
public static string Contacts(AppContext ctx, List<IContact> list )
{
foreach (IContact element in list)
{
// do some db work
}
}
答案 2 :(得分:0)
如果Customer
和Vendor
都继承自同一个基类,并且您实际上不需要在函数中更改列表本身,那么请尝试在函数中使用IEnumerable
签名
public static string Contacts(AppContext ctx, IEnumerable<BaseClass> list )