Hi I’m working on a system that has 4 different types of client they have mostly the same attributes so I decided to create an interface IClient for them to implement and then just add the differing attributes as needed to each client class.
Now I get the Client information from a DB and Load them into a Generic dictionary
The class looks like so
I call the class in my program like soCode:class Class1<T> : Dictionary<int, T> where T:IClient { private IndemnityScheme scheme; public Class1(IndemnityScheme scheme) { this.scheme = scheme; } public int Load() { // "procIndemnityClientSelect"; DataBaseAccess dba = new DataBaseAccess(this.scheme); SqlDataReader reader = dba.LoadData("procPrsymClientSelect"); SmartDataReader smartReader = new SmartDataReader(reader); while (smartReader.Read()) { AceClient newClient = new AceClient(this.scheme); newClient.Clientshort = smartReader.GetString("Client Short Name"); newClient.Clientname = smartReader.GetString("Client Name"); newClient.Clientref = smartReader.GetInt32("client ref"); newClient.AddressLine1 = smartReader.GetString("Address Line 1"); newClient.AddressLine2 = smartReader.GetString("Address Line 2"); newClient.AddressLine3 = smartReader.GetString("Address Line 3"); newClient.AddressLine4 = smartReader.GetString("Address Line 4"); newClient.AddressLine5 = smartReader.GetString("Address Line 5"); newClient.AddressLine6 = smartReader.GetString("Address Line 6"); newClient.Telephone = smartReader.GetString("Telephone No"); newClient.PostCode = smartReader.GetString("post code"); newClient.Contact = smartReader.GetString("Contact"); // newClient.Handler = smartReader.GetString("Handler"); newClient.Joindate = smartReader.GetString("Join Date"); newClient.Leavingdate = smartReader.GetString("leaving Date"); newClient.Salutation = smartReader.GetString("salutation"); newClient.Email = smartReader.GetString("Email"); newClient.Comments = smartReader.GetString("comments"); base.Add(newClient.Clientref, newClient); } smartReader.Close(); smartReader = null; dba = null; return base.Count; } }
Nothing fancy just want to loop throught the collection but on trying to complie I get an error.Code:AceClient c = new AceClient(IndemnityScheme.ACE); Class1<AceClient> cl = new Class1<AceClient>(IndemnityScheme.ACE); cl.Load(); foreach (AceClient ac in cl.Values) { System.Diagnostics.Debug.WriteLine(ac.Clientshort); }
This is the line of code that errors
Error 24 The best overloaded method match for 'System.Collections.Generic.Dictionary<int,T>.Add(int, T)' has some invalid argumentsCode:base.Add(newClient.Clientref, newClient);
Error 25 Argument '2': cannot convert from 'Prsym.AceClient' to 'T'
Can anyone tell me what I am doing wrong??


Reply With Quote