0

我已经检查了这里的帖子,我发现没有一个似乎可以解决我的具体问题。在发布这篇文章时,我误读了 N 元组上的 MSDN 类别,并且看不出我的 N 元组不起作用的明显原因。我第一次尝试创建一个 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了碰撞检测。

4

2 回答 2

3

您实际上非常接近,您只是忘记了几个news 和一个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)));

不过,正如我在评论中提到的那样,您应该真正尝试简化这一点,也许通过创建一个新类型来封装这里发生的任何事情。您需要调试此对象的实例化的事实是一个不好的迹象。

于 2013-05-09T00:01:19.693 回答
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();

瞧!所有那些凌乱的泛型和计数参数都消失了(或者至少被尘封在地毯下......),您可以专注于代码的重要部分=)

于 2013-05-09T00:07:46.260 回答