首页 > 解决方案 > C# 模式匹配任务并获得它的价值

问题描述

我想知道如何模式匹配一​​个Task<T>. 更具体地说,给定静态类型的变量object如何获取其Result属性。

基本上,给:

object obj = new Task<string>() // or maybe Task<IEnumerable<...>>

object result = obj... // obj.Result?

标签: c#

解决方案


简单的方法是使用动态类型:

dynamic obj = new Task<string>(); // etc
object result = obj.Result;

您总是可以先检查是否objTask某种类型的(使用非泛型Task基类)。如果您真的非常想防范用户定义的Task非 子类Task<T>,您可以自己通过反射来做所有事情——但这会做更多的工作。

我通常不喜欢动态类型,如果可能的话,我会尽量避免陷入这种情况,但这应该可以正常工作。


推荐阅读