我有一个具有不同构造函数的类。一个构造函数,没有传递(创建新记录),另一个传递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
?
答案 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();
}