2016-12-26 13 views
0

코딩에서로드 블록을 사용하고 있습니다. 나는 C#으로 코드를 작성하고, Monogame으로 프로그램을 만든다.목록에있는 특정 개체에 읽기/쓰기 가능한 참조 저장

나는 단위 목록을 가지고 있으며, 그들과 함께 마우스 피킹을 시도하고있다. 나는 마우스에서 화면으로 광선을 쏘고 어떤 물체가 첫 번째 물체인지 알아 낸다.

// A method to find which units are currently under the mouse. 
    static public void FindPickedUnits(string ID) 
    { 

     foreach (Unit unit in ListDictionary[ID]) 
     { 

      // Run the code to check whether or not it is picked, and returns a float representing how close it is. 
      unit.IsPicked = Cursor.Pick(unit.Collisions); 

      // And if it is picked... 
      if (unit.IsPicked != null) 
      { 

       // We will clone it as the closest unit if none exist, or... 
       if (ClosestUnit == null) 
       { 

        ClosestUnit = unit; 

       } 

       // if one already does, overwrite it if it's even closer. 
       else if (unit.IsPicked < ClosestUnit.IsPicked) 
       { 

        ClosestUnit = unit; 
        Console.WriteLine("The new closest unit is at X" + unit.Position.X + " Y" + unit.Position.Y); 

       } 
      } 
     } 
    } 

    // elsewhere... 

    Console.WriteLine("The selected unit's color is " + ClosestUnit.Tint); 

이 코드는 선택한 단위를 ClosestUnit 객체로 복제합니다. 그러면 원하는 때마다 읽을 수 있습니다. 문제는 없습니다.

그러나 나는 순전히 가장 가까운 단위의 값을 읽을 수 없다

, 나는 그들에게 편지를 작성하고, 그 중 일부를 변경하고 싶습니다. 그러나 ClosestUnit 개체의 값을 변경하면 목록의 목록에 실제 단위가 반영되지 않습니다.

TL; DR 단위 목록에서 단위를 하나씩 선택하여 코드의 다른 부분에서 쓸 수 있기를 원합니다. ClosestUnit 객체가 ref 매개 변수와 비슷한 기능을 수행 할 수 있다면 복제본이 아닌 실제 단위를 직접 참조하는 것이 쉽지만 그렇게하는 방법을 모르겠습니다.

이 문제를 처리하거나 피하는 가장 효율적인 방법은 무엇입니까?

+0

'단위'는 클래스 또는 구조체입니까? – Klinger

+0

기본적으로 습관으로 클래스를 만들었지 만 아마도 struct, tbh로 변경할 수 있습니다. 왜? – Charybdizs

+0

Unit가 구조체 인 경우이 문제가 발생하는 것을 볼 수있는 한 가지 방법이 될 수 있습니다. 클래스는 참조로 전달되며 객체 참조에 액세스 할 수있는 경우 객체의 속성을 변경할 수 있습니다. 또 다른 가능성은 ListDictionary가 반환하기 전에'Unit' 인스턴스를 복제한다는 것입니다. – Klinger

답변

0

아이러니하게도, 내 코드에는 항상 문제가 없었습니다. ClosestUnit 객체가 클래스 (참조 유형)라는 특성에 의해 ListDictionary에서 해당 객체를 직접 참조한다는 사실을 깨닫지 못했습니다.

ClosestUnit 개체의 값을 변경하면 원본으로 되돌릴 수 있습니다. 예!