當您第一次將 .NET 型的物件指派給訊息或訊息的一部分時,該訊息會保存並維護該物件的參考。
為了提高效率和延展性,協調流程引擎不會執行物件的「深層複製」:也就是說,它不會將對象的整個內容複製到訊息。
如果您隨後將 物件指派給另一個訊息或訊息元件,則對原始的任何修改會導致第二個訊息或訊息部分的修改。 您應該避免這種做法,因為結果無法預測。
如果您需要第二個訊息具有物件的不同複本,您應該將第一個訊息或訊息部分指派給第二個訊息或訊息部分。
請考慮下列範例:
走錯路
myMsg1 = myObj; // assign the first message
myMsg2 = myObj; // assign the second message (wrong!)
myMsg2.myInt = 100; // modify the second
myMsg1.myInt = 5;
在此情況下,myMsg2.myInt 已被覆寫,且其值現在是 5。
正確方式:
myMsg1 = myObj; // assign the first message
myMsg2 = myMsg1; // assign the second message (right!)
myMsg2.myInt = 100; // modify the second
myMsg1.myInt = 5;
在此情況下,myMsg2.myInt 仍然具有值 100,如預期般。