2017-04-12 8 views
-1

からのボクシングの変換はありません、私は、次のパラメータを持つバイナリサーチアルゴリズム、に取り組んでいますジェネリックメソッド:私はこれらの引数を渡すとき、今</p> <p>:int型IComparableを<T>へ

それはそのタイプを語りますintはパラメータFとして使用することはできません(私はジェネリック型が渡される型に関係していないという印象を受けていました)intからIComparableへの 'ボクシング'変換はないということです。

私がやろうとしていたこと:基本的には、このメソッドはさまざまな数値型(int、doubleなど)の検索キーを受け入れるようにしたいので、汎用メソッドでは2つの型を宣言しました。

このコードについて funcデリゲートは、オブジェクトのプロパティcar.Name(string)、car.Wheels(int)の型が異なることを表します。並べ替えられたpropertyFields型に基づいてキーのデータ型をどうにか推測したいのですが、それは複雑すぎるようです。そのため、Fキーでさまざまな型を受け入れています。それに正しい型を与える。

私はこのすべてが混乱しているかどうかわかりませんが、自分のコードについて質問がある場合は、お気軽にお問い合わせください。

編集:BinarySearchメソッドを呼び出すとエラーが発生します。

編集2:propertyFieldの場合、これを引数として渡します。c => c.Longitude(または他のオブジェクトプロパティ)。

+0

あなたのメソッドを宣言する行でエラーになり、またはのT Keyに服用しなければならないのどちらか'key'パラメータを使用しようとしていますか?あなたがしようとしていることに応じて、 'Fm'が' IComparable 'を実装するように制限を加える必要があります。 – krillgar

+3

これはあなたの 'BinarySearch'メソッドの実際の署名ですか?エラーは 'F'に制約があることを示唆しています。実装を追加できますか? – Lee

+0

はいメソッドを呼び出す行でエラーが発生し、キーパラメータに整数を渡します。私は投稿を編集します。 – Vocaloidas

答えて

1

あなたの第二の制約は、where F : IComparable<F>にする必要があります。また、すべてのFを持つべきではないとあなたの代わりにF Key

+0

私はそれが後者だと思います。 – juharr

+0

これは実際に私の初期実装がどのようになったかですが、 "型引数を使用法から推測することができないので問題になります。明示的にパラメータを指定してみてください(int IS明示?)"ここで私の推測は、私がfuncデリゲートでTを使用するときに推論の問題が発生するということです。私は本当にどのように把握できません。 – Vocaloidas

+0

funcのTと戻り値の型が異なる場合、そのエラーが発生します。 'Func 'であり、 'Func 'のようなものではありません。あなたが渡す関数のタイプを確認してください。 –

関連する問題