2012-04-21 70 views
0

誰能幫我返回靜態列表<>

我有,我想用來存儲許多不同類型的列表(float類型,Vector2等的列表)的靜態ListHelper類。然後當我想訪問某個列表時,我可以調用這個類的方法<>

例如,我有一個名爲CalculationHelper的類,我將用它來做一些計算。一旦完成了特定的計算,我將這些值添加到ListHelper中的一個列表中。

但是,如何從這個靜態ListHelper類返回值到Game1課程?

這是我的代碼來顯示我正在嘗試做什麼。 首先,我稱之爲CalculationHelper方法做了一些計算,從的Game1

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

然後在CalculationHelper我做了計算,結果在ListHelper類添加到我的VanishingPoint列表

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加交點到清單

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 2012-04-21 12:55:39

+0

我使用了靜態,所以我不需要非靜態方法的對象引用。公衆ListHelper會是一個更好的解決方案,你會建議嗎? – heyred 2012-04-21 12:58:05

回答

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;   
     }  
    }  
} 
+0

感謝萬,我現在試試這個 – heyred 2012-04-21 13:04:13

+0

np。讓我知道結果如何,或者如果你還有其他問題。 – 2012-04-21 13:08:35

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

然而,你的代碼是非常糟糕的。你很清楚地使用了一些類變量,它們在相同的實例中依賴於彼此。忘記「靜態」並創建一個普通類OR,如果你想確保只有一個實例,可以使用單例模式。