C# Language Changing values elsewhere


public static void Main(string[] args)
    var studentList = new List<Student>();
    studentList.Add(new Student("Scott", "Nuke"));
    studentList.Add(new Student("Vincent", "King"));
    studentList.Add(new Student("Craig", "Bertt"));

    // make a separate list to print out later
    var printingList = studentList; // this is a new list object, but holding the same student objects inside it

    // oops, we've noticed typos in the names, so we fix those
    studentList[0].LastName = "Duke";
    studentList[1].LastName = "Kong";
    studentList[2].LastName = "Brett";

    // okay, we now print the list

private static void PrintPrintingList(List<Student> students)
    foreach (Student student in students)
        Console.WriteLine(string.Format("{0} {1}", student.FirstName, student.LastName));

You'll notice that even though the printingList list was made before the corrections to student names after the typos, the PrintPrintingList method still prints out the corrected names:

Scott Duke
Vincent Kong
Craig Brett

This is because both lists hold a list of references to the same students. SO changing the underlying student object propogates to usages by either list.

Here's what the student class would look like.

public class Student
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public Student(string firstName, string lastName)
        this.FirstName = firstName;
        this.LastName = lastName;