2010-07-30 5 views
2

Я пытаюсь запрограммировать простой реестр служащих, и я хочу использовать общий список, чтобы «сохранить» лиц, которых я создаю.Как добавить в список, который еще не создан. Пожалуйста помоги!

В классе менеджера есть один конструктор и один метод (см. Ниже). Конструктор создает список и добавляет к нему метод или должен быть добавлен к нему. Проблема в том, что я не могу сделать это, как показано ниже, потому что Visual Studio говорит, что employeeList не существует в текущем контексте. Как я буду писать это?

public EmployeeManager() 
{ 
    List<string> employeeList = new List<string>(); 
} 

public void AddEmployee() 
{ 
    employeeList.add("Donald"); 
} 

ответ

12

Вам нужно сделать employeeList переменную-член класса:

class EmployeeManager 
{ 
    // Declare this at the class level 
    List<string> employeeList; 

    public EmployeeManager() 
    { 
     // Assign, but do not redeclare in the constructor 
     employeeList = new List<string>(); 
    } 

    public void AddEmployee() 
    { 
     // This now exists in this scope, since it's part of the class 
     employeeList.add("Donald"); 
    } 
} 
+0

@Reed Совершенство это было быстро. Я боролся с форматированием, прежде чем сдаваться и набирать объяснение того, что я пытаюсь сделать :) –

+0

Это все равно вызовет нулевую ссылку, если список еще не был создан. Сделайте список ленивой частной собственностью. – DevinB

+0

@devinb только в том случае, если использовался другой конструктор, поскольку он стоит, это никогда не вызовет null ref. –

1

ли вы объявить employeeList как член класса?

private List<string> employeeList = new List<string(); 

public EmployeeManager() 
{ 

} 

public void AddEmployee() 
{ 
    employeeList.add("Donald"); 
} 
1
List<string> employeeList = new List<string>(); 

public EmployeeManager() 
{ 
} 

public void AddEmployee() 
{ 
    employeeList.add("Donald"); 
} 

или, альтернативно

List<string> employeeList; 

public EmployeeManager() 
{ 
    employeeList = new List<string>(); 
} 

public void AddEmployee() 
{ 
    employeeList.add("Donald"); 
} 

Как вы определили, employeeList живет только в CTOR. Как только он завершится, employeeList уйдет, и в нем собрана сборная. Перемещая объявление на уровень класса, он живет на всю жизнь объекта.

1

employeeList должен быть членом вашего класса

1

Объявите список вне области видимости функции добавить сотрудника. Тогда, если вы создадите экземпляр в конструкторе, все будет в порядке.

0

Причина, по которой вы получаете эту ошибку, заключается в том, что область employeeList находится только в конструкторе. Для того, чтобы использовать employeeList он должен быть определен в большем объеме, например, так:

class EmployeeManager 
{ 
    private List<string> employeeList; 

    public EmployeeManager() 
    { 
     employeeList = new List<string>(); 
    } 

    public void AddEmployee() 
    { 
     employeeList.add("Donald"); 
    } 
} 
0

Проблема, что у вас есть с областью. Когда конструктор срабатывает, он создает список Employist List, а затем завершает работу. В этот момент сотрудникList исчезает из памяти (стек).

Что вам нужно объявить employeeList на уровне класса, как это:

List<string> employeeList = null; 
public EmployeeManager() 
{ 
    employeeList = new List<string>(); 
} 

public void AddEmployee() 
{ 
    employeeList.add("Donald"); 
} 
0

вам это нужно, чтобы быть уровнем член переменной

public class EmployeeManager 
{ 
    private List<string> _employeeList; 
    public EmployeeManager() 
    { 
     _employeeList = new List<string>(); 
    } 

    public void AddEmployee() 
    { 
     _employeeList.add("Donald"); 
    } 
} 
0

Вам нужно создать экземпляр EmployeeManager в рамках доступный вашим методом «Добавить» - вы просто определяете класс.

0

Вашему классу EmployeeManager необходимо поле или имущество, которое соответствует employeeList. Вроде так:

public class EmployeeManager 
{ 
    private List<string> employeeList; //Create Field 

    public EmployeeManager() 
    { 
    this.employeeList = new List<string>(); 
    } 

    public void AddEmployee() 
    { 
    this.employeeList.Add("Donald"); 
    } 
} 
0

Вы столкнулись с чем-то известным как переменная область. В настоящее время ваш список привязан к конструктору. Вы должны указать его в класс, указав его как члена класса, другие ответы предоставили образцы кода.

http://www.blackwasp.co.uk/CSharpVariableScopes.aspx

http://msdn.microsoft.com/en-us/library/aa691132(VS.71).aspx

Смежные вопросы