如何在C#asp.net中有条件地创建一个类的新实例?

时间:2011-10-12 18:14:57

标签: c# asp.net

我有一个具有不同构造函数的类。一个构造函数,没有传递(创建新记录),另一个传递ID(用于更新)。我想测试一个条件并根据结果创建一个类对象的新实例。我的问题是该对象没有执行if语句。

protected void Position()
{
    if (Session["PositionID"] == null)
    {
        JobPosition p = new JobPosition();
    }
    else
    { 
        JobPosition p = new JobPosition(Convert.ToInt32(Session["PositionID"]));
    }
    p.positionTitle= pTitle.text;
    p.positionMission= pMission.text;
    p.positionDepartment= pDept.text;
    Session["PositionID"] = Convert.ToString(p.SaveDB());   
}

p不能在当前上下文中使用。我可以将我的代码复制到每个条件中,看起来我不应该这样做。

如何使用p

9 个答案:

答案 0 :(得分:8)

您需要将p的声明移到if语句之上:

JobPosition p;

if (Session["PositionID"] == null)
{
    p = new JobPosition();
}
else
{ 
    p = new JobPosition(Convert.ToInt32(Session["PositionID"]));
}

如果在局部范围内声明变量,则在离开该范围时无法访问该变量。

答案 1 :(得分:4)

也许我误解了你的问题,但似乎你想要:

protected void Position()
{
    JobPosition p;
    if (Session["PositionID"] == null)
    {
        p = new JobPosition();
    }
    else
    { 
        p = new JobPosition(Convert.ToInt32(Session["PositionID"]));
    }
    p.positionTitle= pTitle.text;
    p.positionMission= pMission.text;
    p.positionDepartment= pDept.text;
    Session["PositionID"] = Convert.ToString(p.SaveDB());   
}

答案 2 :(得分:2)

JobPosition声明移出条件。

答案 3 :(得分:1)

protected void Position()
{
   JobPosition p; // No need for null;
   if (Session["PositionID"] == null)
    {
        p = new JobPosition();
    }
    else
    { 
        p = new JobPosition(Convert.ToInt32(Session["PositionID"]));
    }

    // Don't need to check if p is null again here too
        p.positionTitle= pTitle.text;
        p.positionMission= pMission.text;
        p.positionDepartment= pDept.text;
        Session["PositionID"] = Convert.ToString(p.SaveDB()); 

}

答案 4 :(得分:1)

将p移出if / else范围到方法范围。

JobPosition p = null;

if (Session["PositionID"] == null)
{
    p = new JobPosition();
}
else
{ 
    p = new JobPosition(Convert.ToInt32(Session["PositionID"]));
}

答案 5 :(得分:1)

在if块之外声明JobPosition:

JobPosition p;
if (Session["PositionID"] == null)
{
    p = new JobPosition();
}
else
{
    p = new JobPosition(Convert.ToInt32(Session["PositionID"]));
} 

答案 6 :(得分:0)

将您的代码更改为:

JobPosition p = null;
if (Session["PositionID"] == null)
{
    p = new JobPosition();
}
else
{ 
    p = new JobPosition(Convert.ToInt32(Session["PositionID"]));
}

并非严格需要null

答案 7 :(得分:0)

protected void Position() 
{ 
    JobPosition p = null; //declare only once
    if (Session["PositionID"] == null) 
    { 
        p = new JobPosition(); 
    } 
    else 
    {  
        p = new JobPosition(Convert.ToInt32(Session["PositionID"])); 
    } 
    p.positionTitle= pTitle.text; 
    p.positionMission= pMission.text; 
    p.positionDepartment= pDept.text; 
    Session["PositionID"] = Convert.ToString(p.SaveDB());    
} 

答案 8 :(得分:0)

我更倾向于做以下事情。

    protected void Position()
    {
        const string positionIdKey = "PositionID";
        var positionId = Session[positionIdKey];
        var p = positionId == null 
            ? new JobPosition() 
            : new JobPosition(Convert.ToInt32(positionId));
        p.Update(pTitle.text, pMission.text, pDept.text);
        Session[positionIdKey] = p.SaveDB();
    }