任何人都可以帮助我
我有一个静态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);
}
}
}
任何人都可以解释一下这是如何完成的,即使这是最好的方法吗?
答案 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,如果你想确定只有一个实例,那就使用单例模式。