如何从列表中检索数据<>包含类对象

时间:2013-05-13 19:29:34

标签: c# list foreach

我想通过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;
    }
}

我从另一个类calculator.cs调用CreateRecipeList(),代码如下:

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。“类对象名称”。“值”
但没有任何反应! 我得到的只是rec.Equals,rec.GetHashcod等选项。这显然是错的。

为了记录,我也尝试过:

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

但这也不起作用。 Int测试仅用于测试目的..它返回3 ..所以列表确实包含正确的信息。

2 个答案:

答案 0 :(得分:3)

请向我们展示食谱类的代码。除此之外,你大部分都在那里...

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

答案 1 :(得分:3)

您需要为Recipe课程中的成员设置正确的access modifiers

  

公开:访问不受限制。

     

protected :访问仅限于从包含类派生的包含类或类型。

     

内部:访问仅限于当前程序集。

     

受保护的内部:访问仅限于从包含类派生的当前程序集或类型。

     

私有:访问仅限于包含类型。

默认情况下,Recipe课程的成员将拥有私有访问修饰符。

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

是:

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

您可能希望按如下方式修改成员访问权限,以便仅在类代码中设置成员的值。由于Recipeset,因此在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)