c# - 如何在Task中获取T类型的属性使用反射?
问题描述
我正在尝试使用反射获取方法的返回类型的属性。
我得到了 using 方法的返回类型MethodInfo.ReturnType
,这产生了我的类型,Task<T>
因为我的方法是async
. 在这种类型上使用GetProperties
会产生属于Task
: Result
, Exception
,的属性AsyncState
。但是,我想获取底层类型 T 的属性。
带有签名的方法示例:
public async Task<MyReturnType> MyMethod()
var myMethodInfo = MyType.GetMethod("MyMethod");
var returnType = myMethodInfo.ReturnType; // Task<MyReturnType>
var myProperties = returnType.GetProperties(); // [Result, Exception, AsyncState]
如何在Task中获取内部类型T的属性而不是Task的属性?
解决方案
您可以使用方法确定类型是否为 a Task
,GetGenericTypeDefinition()
并使用属性获取泛型类型参数GenericTypeArguments
。
在这种情况下:
var myMethodInfo = MyType.GetMethod("MyMethod");
var returnType = myMethodInfo.ReturnType;
if (returnType.GetGenericTypeDefinition() == typeof(Task<>)) {
var actualReturnType = returnType.GenericTypeArguments[0]; // MyReturnType
var myProperties = actualReturnType.GetProperties(); // The properties of MyReturnType!
}
推荐阅读
- javascript - 如果 laravel 中的条件,如何检查隐藏输入是否为空或不使用 else
- spring-boot - 将 SpringBoot / Sleuth Zipkin Traces 发送到 Honeycomb.io
- c++ - 在node-gyp binding.gyp文件中,如何根据系统arch(32位、64位)包含不同的库文件)
- node.js - Express 服务器中间件执行两次?
- vue.js - 麻烦在 vue.js 中从方法重新格式化从 2019 年 10 月 25 日星期五 00:00:00 GM 到 2019-10-25 的日期值
- curl - curl 库的对话流意图检测响应缓慢
- websphere - AdminApp安装时如何设置应用名称和安装路径?
- jenkins - 在 Jenkins 脚本化管道方法中检查数组中的空指针异常
- html - 在 404html nginx 静态网站中找不到相对路径 js 和 css
- adobe-xd - 可点击原型包含 SVG 而不是图像