public bool AddCustomer(int customerNr, params string[] custom) params betyder 0, 1 eller fler av den angivna typen, dvs den kan vara tom och då stämmer den ju överens med den nedre funktionen. Det fungerar alltså inte så bra om du har två olika funktioner/konstruktorer med samma namn där den ena endast skiljer sig genom att ha en parameter mer av samma typ som params parametern, direkt före params parametern. I det här fallet kommer den första funktionen att anropas bara när du har ett int som enda parameter.Lägga till data med olika antal värden
{
customs.Add(new Customer(customerNr, custom));
return true;
}
public bool AddCustomer(int customerNr, string company, params string[] custom)
{
customs.Add(new Customer(customerNr, company, custom));
return true;
}
public void TestValue()
{
AddCustomer(100, "Anna Andersson");
AddCustomer(101,"Företag B","Bertil Bengtsson");
AddCustomer(102,"Företag C", "Carl Carlsson");
}
När jag kör följande kod så kommer även customerNr 100 till den nedre AddCustomer istället för den första. Enligt min lilla kunskap inom programmering i C# så borde den väl gå till den övre AddCustomer, eller?
//JohnnySv: Konstruktor problem
Vad du kan göra här är att antingen vända på det så du har int parametern precis före params parametrarna:
public bool AddCustomer(int customerNr, params string[] custom)
public bool AddCustomer(string company,int customerNr,params string[] custom)
och då får du ändra i Customer konstruktorn också (för den ser ju ut på samma sätt).
Alternativt så har du endast en funktion/konstruktor:
public bool AddCustomer(int customerNr,params string[] custom)
och låter Customer konstruktorn ta hand om företags namn och custom baserat på hur många parametrara som har skickats i custom
/Ruben
www.rjjournal.net