-1

我想通过 foreach 从我创建的包含类对象的列表中检索数据,但我做不到。有人可以告诉我我的代码中缺少什么吗?

我有一个包含以下代码的类 Recipes.cs: public class Recipe {

    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."the class object name"."the value" 中添加点我的方式
但是没有任何反应!我得到的只是rec.Equals、rec.GetHashcod 等选项。这显然是错误的。

为了记录,我也尝试过:

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

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

4

2 回答 2

3

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

    foreach(Recipe rec in Rlist)
    {
         string str = rec.<PropertyName>;
    }
于 2013-05-13T19:33:12.747 回答
3

您需要为类中的成员设置正确的访问修饰符Recipe

public:访问不受限制。

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

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

protected internal:访问仅限于当前程序集或从包含类派生的类型。

private:访问仅限于包含类型。

默认情况下,您的Recipe类的成员将具有private访问修饰符。

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. 剩下的getpublic这使得值可供读取。

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 文章:大写约定。还有,这个:C# Coding Conventions (C# Programming Guide)

于 2013-05-13T19:35:06.500 回答