6
4

1 回答 1

7

啊,你被 C# 语言规范的一个不太明显的限制所挫败。

对于给定的源类型 S 和目标类型 T,如果 S 或 T 是可空类型,则令 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 的转换。

现在,这似乎并不适用,因为您的隐式转换函数需要一个泛型参数,但这个限制似乎同样适用于用作泛型参数的类型。我拿了你的例子并改为IEnumerableList一个完整的类型,而不仅仅是一个接口),它编译没有错误。

长话短说,您只需要在WcfResult构造函数中包装任何返回接口类型的表达式,因为隐式转换将不可用。

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