C# 确定Lambda表达式的返回类型
我有以下代码:C# 确定Lambda表达式的返回类型,c#,lambda,C#,Lambda,我有以下代码: public class ScriptRuntime { public R Execute<T, R>(Expression<Func<T, R>> expression) { // ... do something ... return default(R); } } 因为接口IAgentBaseScript看起来像 public interface IAgentBaseScript {
public class ScriptRuntime {
public R Execute<T, R>(Expression<Func<T, R>> expression) {
// ... do something ...
return default(R);
}
}
因为接口IAgentBaseScript
看起来像
public interface IAgentBaseScript {
Place GetInitialPlace(AgentBase agent);
Vector3? GetInitialLocation(AgentBase agent);
}
理论上应该很清楚,returntype是Vector3,因为它总是与表达式相同。如果没有update Execute方法,就不能,因为C不能确定R 或者,您可以将该方法更新为
public Vector3? Execute<T>(Expression<Func<T, Vector3>> expression)
公共向量3?执行(表达式)
或
public R Execute(表达式)其中R:Vector3?
要推断x=>x.GetInitialLocation(this)
的结果类型,编译器必须首先推断输入类型。正如你所注意到的,它无法做到这一点。错误消息建议指定Execute
方法的类型参数,但这足以让编译器知道x
的类型:
scriptRuntime.Execute((IAgentBaseScript x) => x.GetInitialLocation(this));
public Vector3? Execute<T>(Expression<Func<T, Vector3>> expression)
public R Execute<T, R>(Expression<Func<T, R>> expression) where R : Vector3?
scriptRuntime.Execute((IAgentBaseScript x) => x.GetInitialLocation(this));