2012-04-21 3 views
0

사람이 나에게정적 목록을 반환 <>

도와주세요 수 나는리스트의 다른 유형 (float 형, Vector2 등의 목록)의 수를 저장하는 데 사용할 정적 ListHelper 클래스가 있습니다. 그런 다음 특정 클래스에 액세스하려는 경우이 클래스의 메서드를 호출 할 수 있습니다.

예를 들어 CalculationHelper라는 클래스를 사용하여 일부 계산을 수행합니다. 특정 계산이 완료되면 ListHelper의 내 목록 중 하나에 값을 추가합니다.

하지만이 정적 ListHelper 클래스의 값을 어떻게 반환합니까? Game1 클래스?

다음은 내가하려는 일을 보여주는 코드입니다. 첫째, 나는 GAME1

에서 다음 CalculationHelper에 내가 계산 할
CalculationHelper.ForceIntersections(LineList[i], LineList[i + 1]); 

을 몇 가지 계산을하고

public static class CalculationHelper 
{ 
    public static void ForceIntersections(Line line1,Line line2,List<Sprite> VanishingPointIntersectionList, String greenCirlce) 
    { 
     Vector2 intersectionPoint; 
     // Do some calculations 

     // Add value to ListHelper 
     ListHelper.IntersectionPoint = intersectionPoint; 
    }  
} 

그런 ListHelper 클래스에 내 VanishingPoint 목록에 결과를 ListHelper 추가에 추가 CalculationHelper 메소드를 호출 목록에 교차점

public static class ListHelper 
{ 
    static List<Vector2> VanishingPoint = new List<Vector2>(); 

    static Vector2 intersectionPoint; 
    public static Vector2 IntersectionPoint 
    { 
     get 
     { 
      // How do I return the List? 
      foreach (var value in VanishingPoint) 
      { 
       return value;   // NOT WORKING 
      }   
     } 
     set 
     { 
      intersectionPoint = value; 
      VanishingPoint.Add(intersectionPoint); 
     } 
    } 
} 

아무에게도 이것이 어떻게 이루어 졌는지 설명 할 수 있습니까? 그것을하는 st 방법?

+0

왜 모든 것이 '정적'입니까? – Jon

+0

저는 static을 사용했기 때문에 비 정적 메서드에 대한 객체 참조가 필요하지 않았습니다. 공개 ListHelper가 더 나은 해결책이 되겠습니까? – heyred

답변

1

어떤 종류의 열쇠가 필요합니다. 키는 Vector2 객체 자체에 임베드되거나 Dictionary<CalculationTypes, Vector2>으로 전환 할 수 있습니다. 이렇게하면 어떤 항목이 VanishingPoint인지 지정할 수 있습니다.

return VanishingPoint.Find(v => v.SpecificType == SomeTypes.IntersectionPoint); 

또는 귀하의 경우 :

목록에서 특정 개체를 얻으려면, 당신은 찾기 방법을 사용해야합니다

foreach(Vector2 v in VanishingPoint) 
{ 
    if(v.SpecificType == SomeTypes.IntersectionPoint) 
    { 
    return v; 
    } 
} 
return null; 

을하지만 당신은 반환하고자하는 경우

public static class CalculationHelper 
{ 
    public static void ForceIntersections(Line line1,Line line2,List<Sprite> VanishingPointIntersectionList, String greenCirlce) 
    { 
     Vector2 intersectionPoint; 
     // Do some calculations 

     // Add value to ListHelper 
     ListHelper.VanishingPoints.Add(intersectionPoint); 
    }   
} 

public static class ListHelper  
{  
    static List<Vector2> VanishingPoints = new List<Vector2>();  

    public static List<Vector2> VanishingPoints 
    {  
     get  
     {  
      return VanishingPoints;   
     }  
    }  
} 
+0

감사합니다 백만, 나 지금 시도하십시오 – heyred

+0

np. 그것이 어떻게되는지, 또는 더 이상의 질문이 있으면 알려주십시오. –

1

이 :

전체 목록, 그것은 리팩토링의 비트가 필요합니다
public static Vector2 IntersectionPoint 

은 Vector2 유형의 것을 반환한다는 것을 의미합니다. 목록을 반환하려면 다음과 같이해야합니다.

public static List<Vector2> IntersectionPoint 
{ 
     get 
     { 
      List<Vector2> temp; 
      foreach (var value in VanishingPoint) 
      { 
       temp.Add(value);   
      }  
      return temp; 
     } 
     set 
     { 
      intersectionPoint = value; 
      VanishingPoint.Add(intersectionPoint); 
     } 
    } 

그러나 코드는 매우 나쁩니다. 당신은 분명히 같은 인스턴스에서 서로에 의존하는 몇몇 클래스 변수들로 작업하고 있습니다. "정적"을 잊어 버리고 일반 클래스를 만들거나, 단 하나의 인스턴스 만 존재하는지 확인하려면 싱글 톤 패턴을 사용하십시오.

관련 문제