2012-04-21 75 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,如果你想确保只有一个实例,可以使用单例模式。