简体   繁体   中英

Custom Collection/List To Store Custom Objects

I have a customer object class:

  public class customerObject
  {
    private string _address1;
    private string _address2;
    private string _address3;
    private string _category;
    private string _country;
    private string _county;
    private string _custcode;
    private string _fullname;
    private string _int_rep_hou;
    private string _int_rep_key;
    private double _lat;
    private double _lng;
    private string _postcode;
    private string _rep_code;
    private string _telephone;

    public customerObject()
    {
    }

    public string Address1
    {
        get { return _address1; }
        set { _address1 = value; }
    }

    public string Address2
    {
        get
        {
            return _address2;
        }

        set { _address2 = value; }
    }

    public string Address3 { get { return _address3; } set { _address3 = value; } }

    public string Category
    {
        get { return _category; }
        set { _category = value; }
    }

    public string Country { get { return _country; } set { _country = value; } }

    public string County { get { return _county; } set { _county = value; } }

    public string Custcode
    {
        get { return _custcode; }
        set { _custcode = value; }
    }

    public string Fullname
    {
        get { return _fullname; }
        set { _fullname = value; }
    }

    public string Int_rep_hou
    {
        get { return _int_rep_hou; }
        set { _int_rep_hou = value; }
    }

    public string Int_rep_key
    {
        get { return _int_rep_key; }
        set { _int_rep_key = value; }
    }

    public double Lat { get { return _lat; } set { _lat = value; } }

    public double Lng { get { return _lng; } set { _lng = value; } }

    public string Postcode { get { return _postcode; } set { _postcode = value; } }

    public string Rep_code
    {
        get { return _rep_code; }
        set { Rep_code = value; }
    }
    public string Telephone { get { return _telephone; } set { _telephone = value; } 

 }
}

I have a CustomCollections class

public class CustomerCollection
{

    public List<customerObject> Customers { get; set; }


}

My method that loops through dt rows and converts to a customer object

  public List<Valueobjects.CustomerCollection> dolist(DataTable temptablename)
    {
        //Create Collection Object
        Valueobjects.CustomerCollection Collection = new Valueobjects.CustomerCollection();

        foreach (DataRow row in temptablename.Rows)
        {
            //Create Customer Object
            Valueobjects.customerObject Customer = new Valueobjects.customerObject();

            //set values of customer object
            Customer.Rep_code = "";
            Customer.Int_rep_key = "";
            Customer.Int_rep_hou = "";
            Customer.Fullname = row["Fullname"].ToString().Trim();
            Customer.Custcode = row["Custcode"].ToString().Trim();
            Customer.Category = row["Category"].ToString().Trim();
            Customer.Address1 = row["Address1"].ToString().Trim();
            Customer.Address2 = row["Address2"].ToString().Trim();
            Customer.Address3 = row["Address3"].ToString().Trim();
            Customer.Postcode = row["Postcode"].ToString().Trim();
            Customer.Country = row["Country"].ToString().Trim();
            Customer.Telephone = row["Telephone"].ToString().Trim();
            Customer.Lat = Convert.ToDouble(row["Lat"]);
            Customer.Lng = Convert.ToDouble(row["Lng"]);
            Customer.County = row["County"].ToString().Trim();

            //add to the collection (list)
            Collection.Customers.Add(Customer);
        }

        temptablename = null;

        return Collection;
    }

However when I create a new Customer object and a new CustomerCollection object I am getting an error when adding the customer to the collection list.

Error:

Error 32 Cannot implicitly convert type 'Classes.Valueobjects.CustomerCollection' to 'System.Collections.Generic.List'

Your method is returning a List<CustomerCollection> :

public List<Valueobjects.CustomerCollection> dolist(DataTable temptablename)
{
    //...
}

But the code is trying to return a CustomerCollection :

return Collection;

Just as the error says, these two types are different.

If a CustomerCollection is already a collection of customers, then semantically what is a List<Valueobjects.CustomerCollection> ? A collection of collections? It seems like you're over-pluralizing your objects :)

There are two approaches here. Either return a CustomerCollection from the method:

public CustomerCollection dolist(DataTable temptablename)
{
    //...
}

Or use a List<Customer> if you want to use generic lists as your collection containers:

public List<Customer> dolist(DataTable temptablename)
{
    //...
    var Collection = new List<Customer>();
    //...
    Collection.Add(Customer);
    //...

    return Collection;
}

Side note: You may want to stick to C# conventions for variable naming. As you can see from the code highlighting here on Stack Overflow, your variable names can easily be mistaken for classes/types, which can cause confusion when supporting the code.

Return a CustomerCollection instead of a List<Valueobjects.CustomerCollection> :

public Valueobjects.CustomerCollection Dolist(DataTable temptablename)
{
// ...

Your object has a list, it is not a list.

MSDN: Inheritance

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM