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>型引数の 1 つを忘れただけです。これは機能します:

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 に答える