使用'new'关键字

时间:2015-09-28 05:47:55

标签: c# asp.net .net model ado.net

我正在尝试使用ADO在实体之间建立关系。

public class Banner
{
    public int IdBanner { get; set; }
    public string NameBanner { get; set; }
    public string Media { get; set; }

    public Country Country{ get; set; }
}

public class Country 
{
    public int IdCountry { get; set; }
    public string NameCountry { get; set; }
}

在我的另一个类(DAL)中,我有一个方法和这个方法我需要在Country Class中插入一个属性,就像我的例子:

public List<Banner> Listar()
{
            List<Banner> lista = new List<Banner>();

            using (SqlConnection conn = ConnectionDAL.GetConnection())
            {
                String sql = "BannerListar";

                using (SqlCommand command = new SqlCommand(sql, conn))
                {

                    command.CommandType = CommandType.StoredProcedure;

                    try
                    {
                        conn.Open();

                        SqlDataReader dr = command.ExecuteReader();

                        while (dr.Read())
                        {
                            Banner obj = new Banner();

                            if (dr["IdBanner"] != DBNull.Value)
                                obj.IdBanner = Convert.ToInt32(dr["IdBanner"]);

                            if (dr["NameBanner"] != DBNull.Value)
                                obj.NameBanner = dr["NameBanner"].ToString();

                            if (dr["Media"] != DBNull.Value)
                                obj.Media = dr["Media"].ToString();


                //HERE the problem
                            if (dr["NameCountry"] != DBNull.Value)
                                obj.Country.NameCountry = dr["NameCountry"].ToString();



                            lista.Add(obj);

                        }
                    }
                    catch
                    {
                        throw;
                    }

                    finally
                    {
                        conn.Close();
                        conn.Dispose();
                    }


                    return lista;

                }

            }

        }

当我这样做时,向我展示一个这样的错误:“使用'new'关键字来创建一个对象实例” 我该如何解决?

3 个答案:

答案 0 :(得分:3)

在初始化NameCountry

之前,您必须创建Country类的对象
 if (dr["NameCountry"] != DBNull.Value)
   {
      Country country = new Country();
      country.NameCountry = dr["NameCountry"].ToString(); 
obj.Country = country;
}

答案 1 :(得分:1)

您已创建类Banner的对象,但未创建类Country的横幅中包含的对象。所以在使用它之前创建它。您可以在Banner类的默认构造函数中执行此操作。

public class Banner
{
    public Banner() //Add the default constructor and initiate the Country object
    {
        Country = new Country();
    }
    public int IdBanner { get; set; }
    public string NameBanner { get; set; }
    public string Media { get; set; }

    public Country Country{ get; set; }
}

我已经找到了可能出现问题的原因,并提出了一种解决方案,可以用最少的努力摆脱错误,并故意保持简单以便更好地理解。您可以通过显式传递Country或传递null代替Country来扩展它,或者创建Country Object并将其分配给Banner中的对象。

答案 2 :(得分:0)

在Banner类中Country是Country类的class属性。因此,如果首先在此属性中添加值,则需要为该类创建对象。

添加以下行: -

obj.Country = new Country(); 
if (dr["NameCountry"] != DBNull.Value)
   obj.Country.NameCountry = dr["NameCountry"].ToString();