2013-05-13 3 views
-1

Я хочу получить данные из списка, который я создал, который содержит объекты класса через foreach, но я не могу. Может кто-нибудь, пожалуйста, скажите мне, чего не хватает в моем коде?Как получить данные из списка <>, содержащие объекты класса

У меня есть класс Recipes.cs, который содержит следующий код: общественного класса Рецепт {

string _oveskrift; 
    int _recipe_id; 
    string _opskrift; 
    int _kcal; 

    public Recipe(string overskrift, int recipe_id, string opskrift,int kcal) 
    { 
     _oveskrift = overskrift; 
     _recipe_id = recipe_id; 
     _opskrift = opskrift; 
     _kcal = kcal; 
    } 

} 

public class Recipes 
{ 
    public List<Recipe> CreateRecipeList() 
    { 
     Recipe opskrift1 = new Recipe("Cornflakes med Chili",1,"4 kg cornflakes bages", 420); 
     Recipe opskrift2 = new Recipe("Oksemørbrad",2,"Oksemørbrad steges i baconfedt", 680); 
     Recipe opskrift3 = new Recipe("Tun i vand",3,"Dåsen åbnes og tunen spises", 120); 

     List<Recipe> Recipelist = new List<Recipe>(); 

     Recipelist.Add(opskrift1); 
     Recipelist.Add(opskrift2); 
     Recipelist.Add(opskrift3); 

     return Recipelist; 
    } 
} 

Я называю CreateRecipeList() из другого класса calculator.cs и код выглядит следующим образом:

private int FindRecipes() 
{ 
    List<Recipe> Rlist = new List<Recipe>(); 

    // CREATE THE CLASS AND ADD DATA TO THE LIST 
    Recipes r = new Recipes(); 
    Rlist = r.CreateRecipeList(); 

    int test = 0; // used only for test purposes   

    foreach(var rec in Rlist) 
    { 
     rec.???? 
     test++; 
    } 

    return test; 
} 

Я полагаю, что я должен быть в состоянии расставить свой путь в рец. «класс имя объекта». «значение»
Но ничего не происходит !. Все, что я получаю, это вариант rec.Equals, rec.GetHashcod ect. что явно неверно.

Для записи я также попытался:

foreach(Recipe rec in Rlist) 
{ 
    rec.???? 
    test++; 
} 

Но это не работает. Тест Int только для целей тестирования .. и он возвращает 3 .. поэтому список содержит правильную информацию.

+1

Не могли бы вы опубликовать класс 'Recipe'? –

+1

var Rlist = r.CreateRecipeList(); foreach (Recipe rec в Rlist) {Console.Writeline (rec.Name); } – Amitd

+0

Имеет 'Рецепт' любую публичную собственность? –

ответ

3

Пожалуйста, покажите нам код для класса рецептов. Кроме того, вы большую часть пути туда ...

foreach(Recipe rec in Rlist) 
    { 
     string str = rec.<PropertyName>; 
    } 
3

Вы должны установить правильный access modifiers для членов вашей Recipe класса.

общественный: доступ не ограничен.

protected: Доступ ограничен классом или типами, производными от содержащего класса.

Внутренний: Доступ ограничен текущей сборкой.

защищенный внутренний: Доступ ограничен текущей сборкой или типами, производными от содержащего класса.

частный: Доступ ограничивается содержащим типом.

По умолчанию члены вашей Recipe класса будет иметь модификатор доступа частный.

string _oveskrift; 
int _recipe_id; 
string _opskrift; 
int _kcal; 

является:

private string _oveskrift; 
private int _recipe_id; 
private string _opskrift; 
private int _kcal; 

Может быть, вы хотите изменить доступ к членам следующим образом, для того, чтобы установить значения членов только внутри кода класса. Любая попытка установить свои значения за пределами класса Recipe не будет выполнена, поскольку set - private.get остается public, что делает доступным значение для чтения.

public class Recipe 
{ 
    string _oveskrift; 
    int _recipe_id; 
    string _opskrift; 
    int _kcal; 

    public string Oveskrift 
    { 
     get 
     { 
      return _oveskrift; 
     } 
     private set 
     { 
      _oveskrift=value; 
     } 
    } 

    public int RecipeId 
    { 
     get 
     { 
      return _recipe_id; 
     } 
     private set 
     { 
      _recipe_id = value; 
     } 
    } 

    public string Opskrift 
    { 
     get 
     { 
      return _opskrift; 
     } 
     private set 
     { 
      _opskrift = value; 
     } 
    } 

    public int Kcal 
    { 
     get 
     { 
      return _kcal; 
     } 
     private set 
     { 
      _kcal = value; 
     } 
    } 

    public Recipe(string overskrift, int recipe_id, string opskrift, int kcal) 
    { 
     _oveskrift = overskrift; 
     _recipe_id = recipe_id; 
     _opskrift = opskrift; 
     _kcal = kcal; 
    } 
} 

Кроме того, ознакомьтесь, пожалуйста, как можно скорее следующей статье MSDN: Capitalization Conventions. А также этот: C# Coding Conventions (C# Programming Guide).

+0

Класс рецепта добавлен в начало оригинального сообщения .. –

+0

Спасибо Alex Filipovici .... что сделал трюк :-) –

+0

и спасибо всем за ваши быстрые ответы .... очень признателен... –

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