C# void 传入jobject 参数,只能赋值, 重新new JObject() 无效,什么原因,请高人指点

goodgame365 2021-01-25 03:33:08
代码如下,传入的JObject job 对象,满足三个后,自动清空 job = new JObject();,但外部的job还是有值,是什么原因呢?
public   void addImgJarry(JArray jimg, JObject job,  JToken rs ,string imgName,int sort)
{
if (BLL.JsonDo.getJTokenKey(rs).IndexOf(imgName) > -1)
{


string str = BLL.JsonDo.getJTokenKey(rs).Replace("[", "【");
str = str.Replace("]", "】");
sort = Common.Util.ConvertInt32(BLL.BLLBase.getsTr(str, "【", "】"), 0);
string itemName = str.Split('【')[0];




if (itemName == imgName)
job.Add(imgName, BLL.JsonDo.getJTokenValue(rs));
if (itemName == imgName+"_t")
job.Add(imgName+"_t", BLL.JsonDo.getJTokenValue(rs));
if (itemName == imgName+"_s")
job.Add(imgName+"_s", BLL.JsonDo.getJTokenValue(rs));

if (job.Count == 3)
{
job.Add("sort", sort);
jimg.Add(job);
job = new JObject();
JObject tmp = job;
}

}

}
...全文
801 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
goodgame365 2021-01-25
  • 打赏
  • 举报
回复
引用 3 楼 手在键盘敲很轻 的回复:
ref 了解一下
太感谢了,是这玩意!
  • 打赏
  • 举报
回复
ref 了解一下
goodgame365 2021-01-25
  • 打赏
  • 举报
回复
引用 1 楼 datafansbj 的回复:
函数传递进来的对象即实参,实际传递进来的是该对象的引用,即地址,也就是说实参 job 指向了调用者定义的原对象地址。当你在函数中对 job 重新赋值后,job 指向了新的地址,但是调用者的原对象仍然指向原有地址,故原对象不会变化。若要清空 job 的内容,不能对 job 赋值,应调用 job 的 Clear 方法(如果有的话)。
但是外部传进来的 job 的确被改变了,因为能执行到 if (job.Count == 3) 里面的内容,我里面加了一个JObject tmp = job; 的确是清空了,但外部的的job没有清空,加入到数组Jimg里,造成循环到第4遍的时候,job.Add(imgName, BLL.JsonDo.getJTokenValue(rs));重名了,无法添加这个对象,出错
datafansbj 2021-01-25
  • 打赏
  • 举报
回复
函数传递进来的对象即实参,实际传递进来的是该对象的引用,即地址,也就是说实参 job 指向了调用者定义的原对象地址。当你在函数中对 job 重新赋值后,job 指向了新的地址,但是调用者的原对象仍然指向原有地址,故原对象不会变化。若要清空 job 的内容,不能对 job 赋值,应调用 job 的 Clear 方法(如果有的话)。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧