在将项目从VS2010迁移到VS2012时,我遇到了以下问题.该项目使用了很多反射,为了从接口获取MethodInfo,放置了以下代码:
Expression<Func<ITest, Func<ServiceRequest, ServiceResponse>>> expression = scv => scv.Get;
UnaryExpression unaryExpression = expression.Body as UnaryExpression;
MethodCallExpression methodCallExpression = unaryExpression.Operand as MethodCallExpression;
ConstantExpression constantExpression = methodCallExpression.Arguments[2] as ConstantExpression;
MethodInfo myMethod = constantExpression.Value as MethodInfo;
Run Code Online (Sandbox Code Playgroud)
使用VS2010编译时效果很好,但是如果使用针对.Net 4.0的VS2012编译代码,则methodCallExpression.Arguments.Count()为2.
反编译后,我注意到编译器为同一个表达式生成了不同的代码.
这是一个设计问题,因为设计不应该像methodCallExpression.Arguments [2]中的数字2那样继续传递"幻数".我尝试使用以下方法找到解决方案:
MethodCallExpression outermostExpression = expression .Body as MethodCallExpression;
MethodInfo myMethod = outermostExpression.Method;
Run Code Online (Sandbox Code Playgroud)
但是outermostExpression为null.
最后,我让它改变了表达式如下:
Expression<Func<ITest, ServiceResponse>> expression = scv => scv.Get(default(ServiceRequest));
MethodCallExpression outermostExpression = expression.Body as MethodCallExpression;
Assert.AreEqual("Get", outermostExpression.Method.Name);
Run Code Online (Sandbox Code Playgroud)
它并不理想,但它适用于VS2010和VS2012.
有没有办法从如下表达式中找到MethodInfo:
Expression<Func<ITest, ServiceResponse>> expression = scv => scv.Get(default(ServiceRequest));
MethodInfo methodInfo = GetInnerMethodInfo( expression …Run Code Online (Sandbox Code Playgroud) 我有问题找到如何将带有单个值的json doc转换为case类.这是json:
{
"ax" : {
"bx" : "value1",
"by" : "value2
}
}
Run Code Online (Sandbox Code Playgroud)
以下是案例类:
case class B(bx: String, by: String)
case class A(ax: B)
Run Code Online (Sandbox Code Playgroud)
以下是阅读:
import play.api.libs.json._
import play.api.libs.json.Reads._
import play.api.libs.functional.syntax._
object Implicits {
implicit val bReads: Reads[B] = (
( __ \ "bx" ).read[String] ~
( __ \ "by" ).read[String]
) ( B.apply _ )
implicit val aReads: Reads[A] = (
( __ \ "ax" ).read[B]
) ( A.apply _ )
}
Run Code Online (Sandbox Code Playgroud)
第二个隐式不会使用以下错误进行编译:
Error:(X, Y) overloaded method value …Run Code Online (Sandbox Code Playgroud) Cloud Run与Knative的“服务”(HTTP)功能有关。是否有计划实施“事件”功能?有一个用于“事件”的PubSub源,但是它需要在我们管理的k8s集群上运行。