B
BombDrop
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
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;
}
}
I call the class in my program like so
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);
}
Nothing fancy just want to loop throught the collection but on trying
to complie I get an error.
This is the line of code that errors
base.Add(newClient.Clientref, newClient);
Error 24 The best overloaded method match for
'System.Collections.Generic.Dictionary<int,T>.Add(int, T)' has some
invalid arguments
Error 25 Argument '2': cannot convert from 'Prsym.AceClient'
to 'T'
Can anyone tell me what I am doing wrong??
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
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;
}
}
I call the class in my program like so
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);
}
Nothing fancy just want to loop throught the collection but on trying
to complie I get an error.
This is the line of code that errors
base.Add(newClient.Clientref, newClient);
Error 24 The best overloaded method match for
'System.Collections.Generic.Dictionary<int,T>.Add(int, T)' has some
invalid arguments
Error 25 Argument '2': cannot convert from 'Prsym.AceClient'
to 'T'
Can anyone tell me what I am doing wrong??