Avatar of Steve7423
Steve7423
Flag 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

C#ASP.NET.NET Programming

Avatar of undefined
Last Comment
Steve7423

8/22/2022 - Mon
ASKER CERTIFIED SOLUTION
AndyAinscow

Log in or sign up to see answer
Become an EE member today7-DAY FREE TRIAL
Members can start a 7-Day Free trial then enjoy unlimited access to the platform
Sign up - Free for 7 days
or
Learn why we charge membership fees
We get it - no one likes a content blocker. Take one extra minute and find out why we block content.
Not exactly the question you had in mind?
Sign up for an EE membership and get your own personalized solution. With an EE membership, you can ask unlimited troubleshooting, research, or opinion questions.
ask a question
Miguel Oz

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

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.
Steve7423

ASKER
Quick and accurate response.  Thank you
Experts Exchange has (a) saved my job multiple times, (b) saved me hours, days, and even weeks of work, and often (c) makes me look like a superhero! This place is MAGIC!
Walt Forbes