0

誰でも私を助けてくれませんか

さまざまな種類のリスト (float 型、Vector2 型などのリスト) を格納するために使用したい静的な ListHelper クラスがあります。次に、特定の List<> にアクセスしたいときに、このクラスのメソッドを呼び出すだけです。

たとえば、CalculationHelper というクラスがあり、これを使用して計算を行います。特定の計算が完了したら、値を ListHelper のリストの 1 つに追加します。

しかし、この静的な ListHelper クラスから Game1 クラスなどに値を返すにはどうすればよいでしょうか?

これが私がやろうとしていることを示す私のコードです。まず、CalculationHelper メソッドを呼び出して、Game1 からいくつかの計算を行います。

CalculationHelper.ForceIntersections(LineList[i], LineList[i + 1]);

次に、CalculationHelper で計算を行い、その結果を ListHelper クラスの VanishingPoint List に追加します。

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 で、intersectionPoint をリストに追加します

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);
        }
    }
}

誰かがこれがどのように行われるかを説明できますか?おそらくこれが最善の方法である場合でも?

4

2 に答える 2

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);
        }
    }

しかし、あなたのコードは非常に悪いです。同じインスタンスで相互に依存しているいくつかのクラス変数を明確に操作しています。「静的」を忘れて通常のクラスを作成するか、インスタンスが1つだけであることを確認したい場合は、シングルトンパターンを使用します。

于 2012-04-21T13:05:00.780 に答える
1

何らかの鍵が必要です。キーは Vector2 オブジェクト自体に埋め込むか、Dictionary<CalculationTypes, Vector2>. これにより、どの項目が VanishingPoint であるかを指定できます。

リストから特定のオブジェクトを取得するには、Find メソッドを使用する必要があります。

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;          
        }      
    }    
}  
于 2012-04-21T13:02:44.263 に答える