如何声明和实例化n元组
本文关键字:实例化 元组 声明 何声明 | 更新日期: 2023-09-27 18:12:59
我已经检查了这里的帖子,没有一个我发现似乎解决了我的具体问题。在发布这篇文章的时候,我误读了MSDN关于n元组的分类,并且看不到我的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
进行碰撞检测。你真的很接近了,你只是忘记了几个new
s和一个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)));
但是,正如我在评论中提到的,您应该尝试简化它,也许可以通过创建一个新类型来封装这里发生的任何事情。你需要调试这个对象的实例化,这是一个不好的信号。
@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();
瞧!所有那些混乱的泛型和计数参数都消失了(或者至少被掩盖了…),您可以专注于代码的重要部分=)