【发布时间】:2012-09-02 21:35:30
【问题描述】:
我知道并且我想我了解 IEnumerables 的 (co/conta)variance 问题。但是我认为下面的代码不会受到它的影响。
[DataContract]
public class WcfResult<T>
{
public WcfResult(T result)
{
Result = result;
}
public WcfResult(Exception error)
{
Error = error;
}
public static implicit operator WcfResult<T>(T rhs)
{
return new WcfResult<T>(rhs);
}
[DataMember]
public T Result { get; set; }
[DataMember]
public Exception Error { get; set; }
}
这个类是为了模仿 BackgroundWorker 的RunWorkerCompletedEventArgs,所以我可以从我的 WCF 服务返回错误,而不会导致连接出错。
我的大部分代码都运行良好,所以我可以做这样的事情
public WcfResult<Client> AddOrUpdateClient(Client client)
{
try
{
//AddOrUpdateClient returns "Client"
return client.AddOrUpdateClient(LdapHelper);
}
catch (Exception e)
{
return new WcfResult<Client>(e);
}
}
它工作正常,但是下面的代码给出了一个错误
public WcfResult<IEnumerable<Client>> GetClients(ClientSearcher clientSearcher)
{
try
{
//GetClients returns "IEnumerable<Client>"
return Client.GetClients(clientSearcher, LdapHelper, 100);
}
catch (Exception e)
{
return new WcfResult<IEnumerable<Client>>(e);
}
}
错误在哪里
Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<myNs.Client>'
to 'myNs.WcfResult<System.Collections.Generic.IEnumerable<myNs.Client>>'. An explicit
conversion exists (are you missing a cast?)
导致此错误发生的原因是什么?
【问题讨论】: