非静态错误,找不到原因

时间:2012-02-07 16:49:31

标签: c# foreach while-loop

我收到了“非静态字段,方法或属性Skirmer_Final.Nyhed.FK_Nyhed_ID.get”所需的对象引用错误。我无法弄清楚什么是错的。

我的代码

public class Nyhed
{
    public int FK_Status_ID { get; set; }
    public int FK_Nyhed_ID { get; set; }

    public static List<Nyhed> GetByStatus(int ID, SqlConnection connection)
    {
        List<Nyhed> result = new List<Nyhed>();

        using (var command = new SqlCommand("Select FK_Nyhed_ID from Status_Kan_Se_Nyhed where FK_Status_ID=@id"))
        {
            command.Connection = connection;

            command.Parameters.AddWithValue("id", ID);

            SqlDataReader reader = command.ExecuteReader();
            try
            {
                while (reader.Read())
                {
                    Nyhed StatusKanSeNyhed = new Nyhed();
                    StatusKanSeNyhed.FK_Status_ID = ID;
                    StatusKanSeNyhed.FK_Nyhed_ID = reader.GetInt32(0);
                    result.Add(StatusKanSeNyhed);
                }
            }
            finally
            {
                reader.Close();
            }
            foreach (Nyhed N in result)
            {
                N.status = Status.GetByID(FK_Status_ID, connection);
                N.nyhed = Nyhed.GetByID(FK_Nyhed_ID, connection);
            }
        }
        return result;
    }
}

你能看到错误吗?

4 个答案:

答案 0 :(得分:3)

FK_Nyhed_ID是一个属性。因此,您需要通过对象引用它。我猜这个问题在这里:

foreach (Nyhed N in result) {
    N.status = Status.GetByID(FK_Status_ID, connection);
    N.nyhed = Nyhed.GetByID(FK_Nyhed_ID, connection);
}

您之前在FK_Nyhed_ID个实例上引用了StatusKanSeNyhed,因此我猜你想引用下面的N.FK_Nyhed_ID

foreach (Nyhed N in result) {
    N.status = Status.GetByID(FK_Status_ID, connection);
    N.nyhed = Nyhed.GetByID(N.FK_Nyhed_ID, connection);  //<----- added object reference
}

答案 1 :(得分:2)

我想你想写

        foreach (Nyhed N in result)
        {
            N.status = Status.GetByID(N.FK_Status_ID, connection);
            N.nyhed = Nyhed.GetByID(N.FK_Nyhed_ID, connection);
        }

并添加缺少的N.

答案 2 :(得分:0)

FK_Status_ID是一个实例属性,因此无法从静态方法访问它。 您可以将其设置为静态,也可以将方法更改为实例方法。

答案 3 :(得分:0)

问题在于:

foreach (Nyhed N in result)
        {
            N.status = Status.GetByID(FK_Status_ID, connection);
            N.nyhed = Nyhed.GetByID(FK_Nyhed_ID, connection);
        }

您正在尝试读取公共成员FK_Status_ID,只能通过对象的实例访问该公共成员。