Why is the code in my foreach unreachable? (Exact copy of working code thats been Unit tested)

这一生的挚爱 提交于 2019-12-10 15:35:21

问题


The code below is an exact copy of code that's working perfectly. The difference is that this code is being placed in a WCF Service Application Project whereas the working code is from a Windows Forms Application Project. The code in the foreach is unreachable which is strange because I've tested the code before and it works, returning the correct values

public IEnumerable<Employee> GetStudentDetails(string username,string password)
    {
        var emp = agrDb.LoginAuthentication(username, password);//procedure in the database thats returning two values
                                                                //Namely: EmployeeFirstName and EmployeeLastName
        List<Employee> trainerList = new List<Employee>();

        foreach (var item in emp)
        {
            //unreachable code here
            Employee employ = new Employee();
            employ.EmployeeFirstName = item.EmployeeFirstName;
            employ.EmployeeLastName = item.EmployeeLastName;
            trainerList.Add(employ);
            //trainerList.Add(item.EmployeeLastName);
        }
        return trainerList;
    }

回答1:


The code within foreach loops can be uncreachable if the array or collection is not initialised until runtime.

List<Employee> emp;

// Run when program starts, called from Program.cs
private void InitialiseApplication()
{
    emp = new List<Employee>;

    // Gather data for employees from... somewhere.
    DataAccess.GetEmployees(emp);
}

private void DoStuff()
{
    foreach (var item in emp)
    {
         // Do something.
    }
}

The above code will bring back the warning because "emp" is not initialised at design time.

I've received the same warning in my code, at various stages including within constructors. However, the runtime flow is not affected because by then, "emp" is initialised.

This may be the case with your code. Check to see where and when during the flow of the program "emp" is initialised. You may need to "step into" the program to acheive this, if it is not obvious by sight.




回答2:


Maybe you are always returning a new empty array in agrDB.LoginAuthentication() and your IDE knows that the foreach loop will never iterate over any items.




回答3:


The code is reachable but if it is not executed this means that emp is empty. You have to verify if the value of username and password you are using exist and that agrDb.LoginAuthentication(username, password) is returning a value.



来源:https://stackoverflow.com/questions/13067886/why-is-the-code-in-my-foreach-unreachable-exact-copy-of-working-code-thats-bee

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!