C# ';无法隐式转换类型';尝试从委托获取返回的对象时
我得到了这个错误C# ';无法隐式转换类型';尝试从委托获取返回的对象时,c#,.net,delegates,.net-3.5,C#,.net,Delegates,.net 3.5,我得到了这个错误 Order x = GetOrder(); OrderResult myResult = GetDispatcherForOrder(x); 无法将类型“System.Func”隐式转换为“OrderResult” 如何获取OrderResult?这是因为您试图将委托分配给OrderResult对象。我想你可能想写: Cannot implicitly convert type 'System.Func<Order, OrderResult>' to 'Orde
Order x = GetOrder();
OrderResult myResult = GetDispatcherForOrder(x);
无法将类型“System.Func”隐式转换为“OrderResult”
如何获取OrderResult?这是因为您试图将委托分配给
OrderResult
对象。我想你可能想写:
Cannot implicitly convert type 'System.Func<Order, OrderResult>' to 'OrderResult'
Func myResult=GetDispatcherForOrder(x);
你可能想要这样的东西:
Order x = GetOrder();
OrderResult myResult = GetDispatcherForOrder(x);
对于必须有委托的情况(代码中没有任何内容告诉我您有委托):
但是如何获取OrderResult对象呢?@HélderGonçalves使用Func myResult=GetDispatcherForOrder;OrderResult resultObj=myResult(x);不过,在本例中,您可以使用一个只返回OrderResult的普通方法。
Func<Order, OrderResult> myResult = GetDispatcherForOrder(x);
private Func<Order, OrderResult> GetDispatcherForOrder(Order order)
Order x = GetOrder();
OrderResult myResult = GetDispatcherForOrder(x);
private OrderResult GetDispatcherForOrder(Order order)
{
switch (order.Type)
{
case "A":
return DispatchA(order.Id, order.Info, ...);
case "B":
return DispatchB(order.Id, order.Info, ...);
default:
throw new ArgumentOutOfRangeException("order.Type");
}
}
private Func<Order, OrderResult> GetDispatcherForOrder(Order order)
{
switch (order.Type)
{
case "A":
return dispatcher => DispatchA(order.Id, order.Info, ...);
case "B":
return dispatcher => DispatchB(order.Id, order.Info, ...);
default:
throw new ArgumentOutOfRangeException("order.Type");
}
}
Order x = GetOrder();
Func<Order, OrderResult> myFunction = GetDispatcherForOrder;
OrderResult myResult = myFunction(x);
private OrderResult GetDispatcherForOrder(Order order)
{
switch (order.Type)
{
case "A":
return DispatchA(order.Id, order.Info, ...);
case "B":
return DispatchB(order.Id, order.Info, ...);
default:
throw new ArgumentOutOfRangeException("order.Type");
}
}
Order x = GetOrder();
OrderResult myResult = GetDispatcherForOrder(x);