2014-01-27 2 views
2

EDIT 2Как добавить строку в ICollection <string>?

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

Я создал словарь, в котором передаю string Country, а также ICollection мест для этой страны.

Dictionary<string, NewCountryClass> NTCD = new Dictionary<string, NewCountryClass>(); 

public void AddCountryCollection() 
{ 

    newCountryClass = new NewCountryClass(newCountry); 
    Collections.Add(newCountryClass); 
    NTCD.Add(newCountryClass.Country, newCountryClass); 

} 


public void AddPlace() 
{ 
    string Country = selectedItem.Country; 
    RenameQuestion(placeName); 
    NTCD[Country].Place.Add(placeName);  

} 

Вот мой newCountryClass где я хранил страну и место в этой стране.

private ICollection<string> _places; 
public ICollection<string> Places 
{ 
    get 
    { 
     return _places; 
    } 
    set 
    { 
    if (value == _places) 
     return; 

    _places = value; 
    RaisePropertyChanged(() => Places); 
    } 
} 

Здесь можно добавить места, но я создаю экземпляр моего класса на суммирующий этапе страна, и, следовательно, не может пройти место в то время. (EDIT - я перенесла инициализацию коллекции в конструктор, а не в свойство Places, как это было рекомендовано).

public NewCountryClass(string country) 
{ 
    _places = new ObservableCollection<string>(); 

    if (country != null) 
    { 
     _country = country; 
    } 
} 

Поэтому я попытался создать renamePlace() метод:

public void RenamePlace(string place) 
{ 
    _places.Add(place); 
} 

Однако _places по-прежнему кажется, пустой, даже с этой попытки. Любые другие идеи или что-то, что я делаю неправильно?

+0

Если вы не используете мест собственности, а не полевые _places в конструкторе NewCountryClass? Затем поле _places будет инициализировано. – twrowsell

+0

@twrowsell Но тогда, как вы можете видеть в разделе 'get' свойства places,' _places' проверяется и по-прежнему возвращает null. – Ben

+0

Просто, чтобы уточнить, в конструкторе он проверяет места! = Null. Я не вижу, к какому полю или переменной относится это. У вас есть поле _places и свойство Places. Должно ли это быть? – twrowsell

ответ

0

Необходимо, чтобы learn how to debug a program. В принципе, вы пытаетесь создать экземпляр NewCountryClass здесь:

public void AddCountryCollection() 
{         // <<< Put breakpoint here <<< 
    newCountryClass = new NewCountryClass(newCountry, placeName); 
    Collections.Add(newCountryClass); 
    NTCD.Add(newCountryClass.Country, newCountryClass);  
} 

Если параметр placeName входа в конструкторе null, то это также null здесь ... Вам нужно добавить точку останова здесь и выяснить, почему значение null и убедитесь, что на этой стадии в вашей программе это значение.

+0

Отредактировал мой вопрос. Я не могу передать это место в 'AddCountryCollection' в конструктор, и поэтому поэтому' _places' по-прежнему является нулевым, как при создании экземпляра '_places' не получает переданного строкового значения. Я попытался добавить метод, чтобы передать _questions значение строки отдельно, но все еще ошибки и имеет нулевое значение. – Ben

0

Не было бы лучше инициализировать коллекцию _places в конструкторе вместо свойства get accessor?

public NewCountryClass(string country) 
{ 
    _places = new ObservableCollection<string>(); 
    if (country != null) 
    { 
     _country = country; 
    } 

}

+0

Спасибо за ответ, я переместил коллекцию в конструктор, но все еще проблема с '_places', которая ничего не имеет в коллекции, даже после вызова метода RenamePlace(). – Ben

+0

Является ли RenamePlace функцией-членом на NewCountryClass? – twrowsell

+0

Да, его в том же классе. – Ben

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