4

下面的代码是完美运行的代码的精确副本。不同之处在于此代码被放置在 WCF 服务应用程序项目中,而工作代码来自 Windows 窗体应用程序项目。foreach 中的代码无法访问,这很奇怪,因为我之前测试过代码并且它可以工作,返回正确的值

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;
    }
4

3 回答 3

6

如果直到运行时才初始化数组或集合,则 foreach 循环中的代码可能无法访问。

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

上面的代码将带回警告,因为“emp”在设计时没有初始化。

我在代码中收到了相同的警告,包括在构造函数中的各个阶段。但是,运行时流程不受影响,因为此时“emp”已初始化。

您的代码可能就是这种情况。检查程序“emp”在何时何地被初始化。如果视觉上不明显,您可能需要“进入”程序来实现这一点。

于 2012-12-06T12:21:48.387 回答
0

该代码是可访问的,但如果它没有被执行,这意味着它emp是空的。您必须验证您正在使用的值是否存在并且username正在返回一个值。passwordagrDb.LoginAuthentication(username, password)

于 2012-10-25T12:09:12.287 回答
0

也许您总是返回一个新的空数组,agrDB.LoginAuthentication()并且您的 IDE 知道它foreach loop永远不会迭代任何项目。

于 2012-10-25T11:57:21.943 回答