2013-05-05 2 views
0

Я передаю «ссылочный тип» функции «BY VAL». В функции я пытаюсь изменить ссылочный тип в цикле foreach.Ссылка Тип объекта не обновляется, но возвращает обновленный объект

Тогда, когда дело доходит до звонящего, объект, который я прошел, не обновляется. Но возвращение обновленного объекта.

Я привел пример этой проблемы ниже.

Может ли кто-нибудь помочь мне, почему это происходит, проводя несколько минут?

Ниже являются методы GetStudents(), FilterStudents(), классов, студент, учитель, SSCClass,

SSCClass - Содержит Учитель Array. Преподаватель - содержит студентов.

public void GetStudents() 
    { 

     Student[] sscStudentsOne = new Student[] { new Student { V_SId = 1, V_SName = "Kumar" }, new Student { V_SId = 2, V_SName = "Varun" }, new Student { V_SId = 3, V_SName = "Murthy" } }; 

     Student[] sscStudentsTwo = new Student[] { new Student { V_SId = 4, V_SName = "Sathya" }, new Student { V_SId = 5, V_SName = "Krishna" }, new Student { V_SId = 6, V_SName = "Bindu" } }; 


     Teacher[] sscTeachers = new Teacher[] { new Teacher { V_tId = 1, V_tName = "Jyothi", V_Students = sscStudentsOne }, new Teacher { V_tId = 2, V_tName = "Srinivas", V_Students = sscStudentsTwo } }; 

     SSCClass objSSCClass = new SSCClass(); 
     objSSCClass.V_sscTeachers = sscTeachers; 

     SSCClass objSSCClassFiltered = FilterStudents(objSSCClass); 
     // Problem :- 
     // in objSSCClass Kumar is getting removed but Sathya from second teachere is not getting removed. 
     // in objSSCClassFiltered Kumar and Sathya are Getting removed as we did. 
     // We need objSSCClass object to be updated successfully .. as we can not return this to caller method in my project. 

    } 
    public SSCClass FilterStudents(SSCClass objSSCClasstobeFiltered) 
    { 

     foreach (Teacher item in objSSCClasstobeFiltered.V_sscTeachers) 
     { 

      // here a method will be called and does the below 
      // removes Students based on some criteria 
      // Say, 
      // Remove Student Kumar from first teacher. 
      // Remove Student Sathya from second teacher 

     } 

     // after filtering Students return the SSC Class object 

     return objSSCClasstobeFiltered; 
    } 

    public class Student 
    { 

     int v_sId; 

     public int V_SId 
     { 
      get { return v_sId; } 
      set { v_sId = value; } 
     } 

     string v_SName; 

     public string V_SName 
     { 
      get { return v_SName; } 
      set { v_SName = value; } 
     } 
    } 

    public class Teacher 
    { 

     int v_tId; 

     public int V_tId 
     { 
      get { return v_tId; } 
      set { v_tId = value; } 
     } 


     string v_tName; 

     public string V_tName 
     { 
      get { return v_tName; } 
      set { v_tName = value; } 
     } 


     Student[] v_Students; 

     public Student[] V_Students 
     { 
      get { return v_Students; } 
      set { v_Students = value; } 
     } 
    } 


    public class SSCClass 
    { 
     Teacher[] v_sscTeachers; 

     public Teacher[] V_sscTeachers 
     { 
      get { return v_sscTeachers; } 
      set { v_sscTeachers = value; } 
     } 

    } 
+1

Сообщение код функции, с которыми у вас возникли проблемы с, потому что я, сам, не забудьте понять суть проблемы. – SimpleVar

+2

В чем вопрос? –

+0

Можете ли вы добавить фактический код, а не только комментарии, спасибо. – Guy

ответ

0

Вы не можете обновить Foreach реф, сделать новый, а затем обновить его:

Foreach (Student s in student_list) 
{... 
    S s2 = s; 
    s2 = newval; 
...} 
+0

«Изменение ссылочного типа в foreach» больше напоминает изменение внутреннего состояния объекта, а не ссылку на переменную. Возможно, я ошибаюсь, но это, похоже, не связано с вопросом OP. – SimpleVar