代碼如下,傳入的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;
}
}
}
uj5u.com熱心網友回復:
函式傳遞進來的物件即實參,實際傳遞進來的是該物件的參考,即地址,也就是說實參 job 指向了呼叫者定義的原物件地址。當你在函式中對 job 重新賦值后,job 指向了新的地址,但是呼叫者的原物件仍然指向原有地址,故原物件不會變化。若要清空 job 的內容,不能對 job 賦值,應呼叫 job 的 Clear 方法(如果有的話)。uj5u.com熱心網友回復:
但是外部傳進來的 job 的確被改變了,因為能執行到 if (job.Count == 3) 里面的內容,我里面加了一個JObject tmp = job; 的確是清空了,但外部的的job沒有清空,加入到陣列Jimg里,造成回圈到第4遍的時候,job.Add(imgName, BLL.JsonDo.getJTokenValue(rs));重名了,無法添加這個物件,出錯
uj5u.com熱心網友回復:
ref 了解一下uj5u.com熱心網友回復:
太感謝了,是這玩意!轉載請註明出處,本文鏈接:https://www.uj5u.com/net/252354.html
標籤:C#
