如何将一个或其他列表传递给函数

时间:2014-06-16 17:32:24

标签: c# function intuit-partner-platform quickbooks-online intuit

我想知道是否有人可以帮助我,我在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
   }
} 

3 个答案:

答案 0 :(得分:3)

如果您希望/可以为这两个类使用相同的代码(CustomerVendor),请将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);

<强>更新
如果您的VendorCustomer类不同,不是从相同的基类派生的,或者没有实现相同的接口,那么您需要为每个类编写自己的函数

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)

如果CustomerVendor都继承自同一个基类,并且您实际上不需要在函数中更改列表本身,那么请尝试在函数中使用IEnumerable签名

public static string Contacts(AppContext ctx, IEnumerable<BaseClass> list )