none
ジェネリック T 型への変換 RRS feed

  • 質問

  • C#構文の質問です。
    XNAの
    public void DrawUserPrimitives<T>(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int primitiveCount);
    をラップしたくて、

    別クラスに
    public void draw<T>(PrimitiveType primitiveType, T[] vertexData, int primitiveCount)
    {
        device.DrawUserPrimitives(primitiveType, vertexData, 0, primitiveCount);
    }
    を作成しました。
    その際、CS0314エラー
    型 '型 1' はジェネリック型またはメソッド '名前' 内で型パラメータ '名前' として使用できません。'型 1' から '型 2' へのボックス変換または型パラメータ変換がありません。
    が出ました。
    where T での制約が必要だとの事で、
    色々試しましたが、エラーを解決出来ないでいます。
    XNAのDrawUserPrimitivesのvertexData引数は、
    VertexPositionColorTexture 等のstructなので、
    制約になるのでしょうか・・・

    C#初心者でいまいち要領がつかめなくて申し訳ありません。
    ご教授宜しくお願い致します。
    2009年5月5日 8:58

回答

  • DrawUserPrimitivesにカーソルを合わせてF12キーを押すと、下記のようなメタデータを見ることができます。

    public void DrawUserPrimitives<T>(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int primitiveCount) where T : struct;

    これによると、"where T : struct"という制約がついているようですね。
    その自作したdrawメソッドにも"where T : struct"とつければ、コンパイルは通ると思いますよ。
    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    • 回答としてマーク kentakenta 2009年5月24日 4:15
    2009年5月5日 9:56
    モデレータ

すべての返信

  • DrawUserPrimitivesにカーソルを合わせてF12キーを押すと、下記のようなメタデータを見ることができます。

    public void DrawUserPrimitives<T>(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int primitiveCount) where T : struct;

    これによると、"where T : struct"という制約がついているようですね。
    その自作したdrawメソッドにも"where T : struct"とつければ、コンパイルは通ると思いますよ。
    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    • 回答としてマーク kentakenta 2009年5月24日 4:15
    2009年5月5日 9:56
    モデレータ
  • Azulean さん、ご返答有難う御座いました!
    無事解決しました!

    カーソルを合わせて、F12をおしても、
    public void DrawUserPrimitives<T>(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int primitiveCount);
    しか表示されず、肝心なwhere T : struct が見れませんでした。
    何か表示方法は御座いますでしょうか?
    2009年5月16日 8:22
  • カーソルを合わせて、F12をおしても、
    public void DrawUserPrimitives<T>(PrimitiveType primitiveType, T[] vertexData, int vertexOffset, int primitiveCount);
    しか表示されず、肝心なwhere T : struct が見れませんでした。
    何か表示方法は御座いますでしょうか?

    見えているものが違うのかな?

    下記の私のページで画像つきで私が見ているものをちょっと上げてみました。
    http://azulean.spaces.live.com/blog/cns!9E1932AF4BE9E15D!192.entry
    http://azulea.wordpress.com/2009/05/16/graphicsdevice-drawuserprimitives%e3%81%ae%e3%83%a1%e3%82%bf%e3%83%87%e3%83%bc%e3%82%bf%e3%81%ae%e8%a1%a8%e7%a4%ba%e6%96%b9%e6%b3%95/


    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。

    2009年5月16日 9:38
    モデレータ
  • Azuleanさん、解説ページまで書いていただき、有難う御座います!

    先ほどやってみたら、何故か表示されました・・・
    タブでGraphics.Deviceと書いてある横に、【メタデータから】と現在表示されてますが、
    先日はGraphics.Deviceとしか表示されていなかったように思います。
    何が違うのか不明ですが、現在はちゃんと見れています!

    どうもご教授有難う御座いました!
    2009年5月24日 4:15