按照大家的指导我把get方法改造成下面的加out参数的 public Goods outGet(Guid? Id, out String ActionFlag) { var item = new Goods(); ActionFlag = "0"; if (Id.HasValue) { item = nContext.Goods.SingleOrDefault(a => a.Id.Equals(Id.Value)); ActionFlag = "1"; } return item; } 控制层里面的方法会出错 public ActionResult Eidt(Guid? id) { var item = _GoodsBLL.Get(id,out value);//请问调用的时候该怎么写? ViewBag.userid = item.UserId;//item的对象又该怎么调用呢?
string value=“”; var item = _GoodsBLL.Get(id,out value);使用out参数必须先声明一个对象,这也是我不喜欢out参数的原因,1是打断正常编写逻辑,2是也不符合正常程序逻辑,所以我个人更愿意直接自定义异常来表示,非正常逻辑的错误
/// <summary> /// 内部逻辑错误,以便对外显示消息 /// </summary> public class LogicException : Exception { public LogicException(string msg):base(msg) { } }后面如果遇到业务逻辑上的错误直接写 throw new LogicException("这里业务逻辑错误");前端调用 try{} catch(LogicException ex) { //这里你可以根据情况,选择是吃掉异常,对外弹出警告显示ex 的msg } @红孩儿,你现在到处都出现啊,不过你不觉着out,逻辑上很别扭了,本来这个逻辑不是上面的逻辑,本来你顺手就调用了,结果写着写着,突然发现后面有n个out参数,你就把编写逻辑打断,跑上面先定义n个变量,然后在回来继续写你的调用逻辑,你要觉着习惯挺好,我反正觉着不习惯,对此种api方式一直都无爱
ps:单纯就你这个方法,也可以另外一种约定处理 var item = new Goods(); 这里可以先不要new他, 在后面成功了在new,不成功就返回null这是一种约定处理方式,因为前端调用者通常也习惯于在任何对象获取以后优先判定一下null,来避免微软那个”未找到对象实例“的诅咒 var obj=xxx.getxxx() if(obj!=null) { //基本上这种代码段,已经是俺们编写的约定常态了 }
你想多加一个,只用return是不行的
可以多加个out int ActionFlag参数,用参数返回
public Goods outGet(Guid? Id, out String ActionFlag)
{
var item = new Goods();
ActionFlag = "0";
if (Id.HasValue)
{
item = nContext.Goods.SingleOrDefault(a => a.Id.Equals(Id.Value));
ActionFlag = "1";
}
return item;
}
控制层里面的方法会出错
public ActionResult Eidt(Guid? id)
{ var item = _GoodsBLL.Get(id,out value);//请问调用的时候该怎么写?
ViewBag.userid = item.UserId;//item的对象又该怎么调用呢?
var item = _GoodsBLL.Get(id,out value);使用out参数必须先声明一个对象,这也是我不喜欢out参数的原因,1是打断正常编写逻辑,2是也不符合正常程序逻辑,所以我个人更愿意直接自定义异常来表示,非正常逻辑的错误
/// 内部逻辑错误,以便对外显示消息
/// </summary>
public class LogicException : Exception
{
public LogicException(string msg):base(msg)
{ }
}后面如果遇到业务逻辑上的错误直接写 throw new LogicException("这里业务逻辑错误");前端调用
try{}
catch(LogicException ex)
{
//这里你可以根据情况,选择是吃掉异常,对外弹出警告显示ex 的msg
}
@红孩儿,你现在到处都出现啊,不过你不觉着out,逻辑上很别扭了,本来这个逻辑不是上面的逻辑,本来你顺手就调用了,结果写着写着,突然发现后面有n个out参数,你就把编写逻辑打断,跑上面先定义n个变量,然后在回来继续写你的调用逻辑,你要觉着习惯挺好,我反正觉着不习惯,对此种api方式一直都无爱
var item = new Goods(); 这里可以先不要new他,
在后面成功了在new,不成功就返回null这是一种约定处理方式,因为前端调用者通常也习惯于在任何对象获取以后优先判定一下null,来避免微软那个”未找到对象实例“的诅咒 var obj=xxx.getxxx()
if(obj!=null)
{
//基本上这种代码段,已经是俺们编写的约定常态了
}
string ActionFlag = @{ViewBag.abc}//js调用控制层的变量正确写法??
</script >
两种方法:第一,自己定义一个实体,将你要的属性全部添加到实体里面去。第二,在方法参数增加一个。public Goods outGet(Guid? Id, out String ActionFlag)