0

谁能帮帮我吗

我有一个静态 ListHelper 类,我想用它来存储许多不同类型的列表(float、Vector2 等类型的列表)。然后,当我想访问特定的 List<> 时,我可以调用这个类的方法

例如,我有一个名为 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);
        }
    }
}

谁能解释这是如何完成的,即使这是最好的方法?

4

2 回答 2

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

但是,您的代码非常糟糕。您显然正在使用一些类变量,它们在同一实例中相互依赖。忘记“静态”并创建一个普通类或者,如果您想确保只有一个实例,请使用单例模式。

于 2012-04-21T13:05:00.780 回答