假设我有两种方法:
public async Task<int> Foo()
{
return Datetime.Now.Second;
}
public async Task<string> Bar()
{
return "222";
}
还有一个上下文,其中包含有关方法的一些信息:
Context.ReturnValue,对于Foo()为Task<int>
,对于Bar()为Task<string>
。
我调用的方法的Context.MethodInfo MethodInfo。
我想做的是一些模拟的事情,比如我想根据Context.MethodInfo.ReturnType的类型为Foo()方法返回2.
Context.ReturnValue = Task<int>.FromResult(2);
我也希望这个解决方案用于Bar():
Context.ReturnValue = Task<string>.FromResult("333");
所以问题是如何构建基于Task<TResult>
变量的[CachingAttribute]
public async Task<int> Foo(){return 1;}
变量
Context.MethodInfo.ReturnType和value。
为什么我要这样做是因为我想通过CachingAttribute缓存方法的返回结果。
var result = await Foo();
此属性可以自动处理以下事项:
然后在使用中。 当我们调用Foo方法时:
List<String> listCopyLastPrice1 = new ArrayList<String>();
List<WebElement> listOfLastPrice1 = driver.findElements(By.cssSelector("[data-column-name='last'][class*='pid']"));
for(WebElement elem:listOfLastPrice1)
listCopyLastPrice1.add(elem.getAttribute("innerHTML"));
System.out.println(listCopyLastPrice1);
//使用缓存属性,结果可以是10之类的特定值。然后,我可以将缓存功能添加到我想要的任何方法而不改变调用者的行为。
答案 0 :(得分:-1)
我已经使用动态关键字解决了这个问题。
示例代码:
if (context.IsAsync())
{
dynamic member = context.ServiceMethod.ReturnType.GetMember("Result")[0];
dynamic temp = System.Convert.ChangeType(result, member.PropertyType);
context.ReturnValue = System.Convert.ChangeType(Task.FromResult(temp), context.ServiceMethod.ReturnType);
}