返回静态列表<>

时间:2012-04-21 12:53:55

标签: c# list static xna

任何人都可以帮助我

我有一个静态ListHelper类,我想用它来存储许多不同类型的列表(float,Vector2等类型的列表)。然后,当我想要访问特定列表<>

时,我可以调用此类的方法

例如,我有一个名为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中将intersectionPoint添加到List

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

任何人都可以解释一下这是如何完成的,即使这是最好的方法吗?

2 个答案:

答案 0 :(得分: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;          
        }      
    }    
}  

答案 1 :(得分: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,如果你想确定只有一个实例,那就使用单例模式。