当我使用PropertyInfo.SetValue()时抛出stackoverflow异常

时间:2009-10-14 05:18:10

标签: asp.net stack-overflow propertyinfo setvalue

当我在asp.net中使用PropertyInfo.SetValue时,它会抛出stackoverflow异常。 我写这段代码:

    for (int i = 0; i < rivalSeriesIDList.Count; i++)
    {
        cardb_series rivalSeries = seriesBll.GetSeriesInfoByID(rivalSeriesIDList[i].ToString());
        this.GetType().GetProperty("brandid" + (i + 1)).SetValue(this, rivalSeries.brand_id, null);
        this.GetType().GetProperty("seriesid" + (i + 1)).SetValue(this, rivalSeries.series_id, null);
    }

brandid + number和seriesid + number是aspx_page的属性。像这样:

public int brandid1
{
    get
    {
        if (Request.Form["brandid1"] != null)
            return int.Parse(Request.Form["brandid1"]);
        if (Request["brandid1"] != null)
            return int.Parse(Request["brandid1"]);
        return 0;
    }
    set
    {
        brandid1 = value;
    }
}

当我在控制台应用程序中测试代码时,它没问题。但是当我在Web应用程序中测试它时,它将导致堆栈溢出异常。 我不知道为什么。因为网络是无国家的? 感谢。

1 个答案:

答案 0 :(得分:2)

因为你递归调用你的属性,即使你直接调用该属性也会得到相同的异常

public int brandid1 <- this one
{
    get
    {
        if (Request.Form["brandid1"] != null)
            return int.Parse(Request.Form["brandid1"]);
        if (Request["brandid1"] != null)
            return int.Parse(Request["brandid1"]);
        return 0;
    }
    set
    {
       and this one -> brandid1 = value;
    }
}

我不知道你想做什么,但试试这个

private int _brandid1;
 public int brandid1 <- this one
    {
        get
        {
            if (Request.Form["brandid1"] != null)
                return int.Parse(Request.Form["brandid1"]);
            if (Request["brandid1"] != null)
                return int.Parse(Request["brandid1"]);
            return 0;
        }
        set
        {
           _brandid1 = value;
        }
    }