我已经查看了这里的帖子,我发现的任何内容似乎都没有解决我的具体问题。在发布这篇文章时,我误读了N-tuples上的MSDN类别,并且看不出我的N-Tuple无法正常工作的明显原因。我第一次尝试制作N大小的元组,当我尝试分配值时会出错。我想我的语法略有不同。
我的元组:
public Tuple<float, float, float, float, float, float, float,
Tuple<float, float, float, float, float, float, float, Tuple<float>>>
CollisionTuple = new Tuple<float, float, float, float, float, float,
float, Tuple<float, float, float, float, float, float, float, Tuple<float>>>
(0, 0, 0, 0, 0, 0, 0, Tuple<float, float, float, float, float, float, float>
(0, 0, 0, 0, 0, 0, 0, Tuple<float>(0)));
那么,我的语法的哪一部分已关闭?在为元组赋值之前的所有内容都不会返回错误。
更新
我只是overloaded
方法,并使用array
进行碰撞检测。
答案 0 :(得分:3)
你真的非常接近,你只是忘记了几个new
和一个Tuple<float>
类型的参数。这有效:
public Tuple<float, float, float, float, float, float, float,
Tuple<float, float, float, float, float, float, float, Tuple<float>>>
CollisionTuple = new Tuple<float, float, float, float, float, float,
float, Tuple<float, float, float, float, float, float, float, Tuple<float>>>
(0, 0, 0, 0, 0, 0, 0, new Tuple<float, float, float, float, float, float, float, Tuple<float>>
(0, 0, 0, 0, 0, 0, 0, new Tuple<float>(0)));
正如我在评论中提到的那样,你应该真的尝试简化这个,也许是通过创建一个新类型来封装这里发生的任何事情。您需要调试此对象的实例化这一事实是一个不好的迹象。
答案 1 :(得分:1)
@ dlev的回答是正确的。但是,我建议为此创建一个新类型,以使您的代码更具可读性:
class CollisionTuple : Tuple<float, float, float, float, float, float, float,
Tuple<float, float, float, float, float, float, float,
Tuple<float>>>
{
CollisionTuple(float f1, float f2, ..., float f15)
: Tuple<(7 type arguments...)>(f1, f2, ..., f7,
new Tuple<(7 type arguments again...)>(f8, ..., f14,
new Tuple<float>(f15))))
{
}
}
这样,您可以像这样对其进行实例化:
// where the class is used:
CollisionTuple collTup = new CollisionTuple(0, 0, (etc...), 0);
如果你知道你经常用零来初始化它,你甚至可以创建一个默认的构造函数来为你做这个:
// inside the class, with the other constructor still defined:
CollisionTuple() : CollisionTuple(0, 0, (etc...), 0) { };
这使得使用更加容易:
var collisionTuple = new CollisionTuple();
瞧!所有那些凌乱的泛型和计数参数都已经消失了(或至少在地毯上拂去......)你可以专注于代码的重要部分=)