6
4

1 に答える 1

7

ああ、あなたは C# 言語仕様の明らかではない制限に失敗しました。

特定のソース型 S とターゲット型 T について、S または T が null 許容型の場合、S 0と T 0はそれらの基になる型を参照します。それ以外の場合、S 0と T 0はそれぞれ S と T に等しくなります。クラスまたは構造体は、ソースの型 S からターゲットの型 T への変換を宣言できるのは、次のすべてが当てはまる場合のみです。

· S 0と T 0は異なるタイプです。

· S 0または T 0は、演算子の宣言が行われるクラスまたは構造体の型です。

· S 0も T 0もインターフェイス タイプではありません。

· ユーザー定義の変換を除き、S から T へ、または T から S への変換は存在しません。

暗黙の変換関数がジェネリック パラメーターを取るため、これが適用されるようには見えませんが、この制限は、ジェネリック引数として使用される型にも同様に適用されるようです。私はあなたの例を取り、(インターフェイスだけでなく完全な型)に変更IEnumerableし、エラーなしでコンパイルしました。List

簡単に言うと、WcfResultコンストラクターでインターフェイス型を返す式をラップする必要があるだけです。これは、暗黙的なキャストが使用できないためです。

return new WcfResult<IEnumerable<Client>>(Client.GetClients(clientSearcher, LdapHelper, 100));
于 2012-09-10T02:39:07.780 に答える