การเพิ่มคำตอบที่ Marc Gravell และ Jon Skeet ได้รับคำตอบเป็นสิ่งสำคัญที่จะต้องทราบวัตถุและประเภทการอ้างอิงอื่น ๆ ที่ทำงานคล้ายกันเมื่อถูกส่งคืน แต่มีความแตกต่างบางอย่าง
"อะไร" ที่ได้รับกลับมาตามตรรกะเดียวกับประเภทที่เรียบง่าย:
class Test {
    public static Exception AnException() {
        Exception ex = new Exception("Me");
        try {
            return ex;
        } finally {
            // Reference unchanged, Local variable changed
            ex = new Exception("Not Me");
        }
    }
}
การอ้างอิงที่ถูกส่งคืนได้รับการประเมินแล้วก่อนที่ตัวแปรโลคัลจะถูกกำหนดการอ้างอิงใหม่ในบล็อกสุดท้าย
การดำเนินการเป็นหลัก:
class Test {
    public static Exception AnException() {
        Exception ex = new Exception("Me");
        Exception CS$1$0000 = null;
        try {
            CS$1$0000 = ex;
        } finally {
            // Reference unchanged, Local variable changed
            ex = new Exception("Not Me");
        }
        return CS$1$0000;
    }
}
ความแตกต่างคือมันยังคงเป็นไปได้ที่จะแก้ไขประเภทที่ไม่แน่นอนโดยใช้คุณสมบัติ / วิธีการของวัตถุซึ่งอาจส่งผลให้เกิดพฤติกรรมที่ไม่คาดคิดหากคุณไม่ระวัง
class Test2 {
    public static System.IO.MemoryStream BadStream(byte[] buffer) {
        System.IO.MemoryStream ms = new System.IO.MemoryStream(buffer);
        try {
            return ms;
        } finally {
            // Reference unchanged, Referenced Object changed
            ms.Dispose();
        }
    }
}
สิ่งที่สองที่ควรพิจารณาเกี่ยวกับการลองส่งคืนสุดท้ายคือพารามิเตอร์ที่ส่งผ่าน "การอ้างอิง" ยังคงสามารถแก้ไขได้หลังจากการส่งคืน เฉพาะค่าตอบแทนได้รับการประเมินและถูกเก็บไว้ในตัวแปรชั่วคราวที่รอการส่งคืนตัวแปรอื่น ๆ ยังคงได้รับการแก้ไขตามปกติ สัญญาของพารามิเตอร์ออกอาจไม่ได้ผลจนกว่าจะปิดกั้นวิธีนี้ในที่สุด
class ByRefTests {
    public static int One(out int i) {
        try {
            i = 1;
            return i;
        } finally {
            // Return value unchanged, Store new value referenced variable
            i = 1000;
        }
    }
    public static int Two(ref int i) {
        try {
            i = 2;
            return i;
        } finally {
            // Return value unchanged, Store new value referenced variable
            i = 2000;
        }
    }
    public static int Three(out int i) {
        try {
            return 3;
        } finally {
            // This is not a compile error!
            // Return value unchanged, Store new value referenced variable
            i = 3000;
        }
    }
}
เช่นเดียวกับการสร้างโฟลว์อื่น ๆ "try-return-final" มีที่และสามารถอนุญาตให้ใช้โค้ดที่ดูสะอาดกว่าการเขียนโครงสร้างที่คอมไพล์จริง แต่จะต้องใช้อย่างระมัดระวังเพื่อหลีกเลี่ยงของ gotcha