코딩에서로드 블록을 사용하고 있습니다. 나는 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 매개 변수와 비슷한 기능을 수행 할 수 있다면 복제본이 아닌 실제 단위를 직접 참조하는 것이 쉽지만 그렇게하는 방법을 모르겠습니다.
이 문제를 처리하거나 피하는 가장 효율적인 방법은 무엇입니까?
'단위'는 클래스 또는 구조체입니까? – Klinger
기본적으로 습관으로 클래스를 만들었지 만 아마도 struct, tbh로 변경할 수 있습니다. 왜? – Charybdizs
Unit가 구조체 인 경우이 문제가 발생하는 것을 볼 수있는 한 가지 방법이 될 수 있습니다. 클래스는 참조로 전달되며 객체 참조에 액세스 할 수있는 경우 객체의 속성을 변경할 수 있습니다. 또 다른 가능성은 ListDictionary가 반환하기 전에'Unit' 인스턴스를 복제한다는 것입니다. – Klinger