Link to home
Start Free TrialLog in
Avatar of Steve7423
Steve7423Flag for Canada

asked on

Cannot implicitly convert type 'System.Collections.IList' to 'System.Collections.Generic.List

This is my first attempt at generics and I'm a little puzzled.  I don't understand what is causing this error.  I've googled this and so far no light bulb going off.  I've pointed out the line that causes the error but I can't seem to figure out why.  I've included the functions related so you can get the overall picture to see what I'm doing.  some insight would be appreciated.  also being the first attempt at generics, I'm not sure if I'm doing this right, so feed back is welcomed.


The error

Cannot implicitly convert type 'System.Collections.IList' to 'System.Collections.Generic.List<Domains.Entities.Employee>'


Error point
this is the Load event of a form called debug

private void Debug_Load(object sender, EventArgs e)
        {
            SQL_DataObject empData = new SQL_DataObject();
            
            Employee objemp = new Employee();

              [b]the Error line:[/b]    List<Employee> Lst_rcds = empData.Get_Data<Employee>(objemp);
        }

Open in new window




My DataObject Class:

 
public System.Collections.IList Get_Data<T>(object objentity)
        {
        
            string cs = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;

            using (SqlConnection con = new SqlConnection(cs))
            {
                SqlCommand cmd = new SqlCommand("SPGetStudentByID", con);
                cmd.CommandType = CommandType.StoredProcedure;
                //SqlParameter param = new SqlParameter("@ID", ID);
                //cmd.Parameters.Add(param);

                List<T> lst_entity = new List<T>();

                con.Open();
                SqlDataReader rdr = cmd.ExecuteReader();

                while (rdr.Read())
                {
                    //lst_entity.Add(Set_EntityFields(objentity));

                }
                
                return  lst_entity.ToList();
            }
              throw new NotImplementedException();
        }


private object Set_EntityFields<T>(T objentity)
        {
            setInstanceProperty<object>(objentity, "ID", 123);
            
            return null;
            
        }



static void setInstanceProperty<T>(object instance, string propertyName, T value)
        {
            Type type = instance.GetType();
            PropertyInfo propertyInfo = type.GetProperty(propertyName, BindingFlags.Instance | BindingFlags.Public, null, typeof(T), new Type[0], null);

            propertyInfo.SetValue(instance, value, null);

            return;
        }

Open in new window

ASKER CERTIFIED SOLUTION
Avatar of AndyAinscow
AndyAinscow
Flag of Switzerland image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
The method needs to return strong type generic list. (Thus Ilist or List will not return the desired List<Employee>)
Replace:
public System.Collections.IList Get_Data<T>(object objentity)
with
public List<T> Get_Data<T>(T objentity)

Open in new window

Avatar of Steve7423

ASKER

AndyAinscow, Miguel Oz,


Thank you this solved it.  I can't believe I over looked this, ...forest through the trees I guess.

Miguel Oz, I will be granting the answer to AndyAinscow, since his response was correct and the first.  I made the change, removing System.Collections.IList and setting it to List<T>.  then, resolved another unrelated error and it worked.

Thank you both for directing my focal point to this difference.
Quick and accurate response.  Thank you