gpt4 book ai didi

c# - 检查 Object 是 Task 还是 Task

转载 作者:行者123 更新时间:2023-11-30 14:06:36 24 4
gpt4 key购买 nike

在下面的示例代码中(由于 if 检查无效,它无法编译)我需要弄清楚 returnValue 是“TResult 的任务”还是任务或其他类型。如果它是 TResult 的任务我可以访问并记录 Result 属性,如果它是一个任务,则没有返回值并且我记录“[Task]”,如果这两者都不是那么我可以直接记录返回值或记录一个[“空”]

public void LogReturnValue(obj returnValue)
{
var valueToLog = "";
if(returnValue is Task)
{
valueToLog = "[Task]";
} else if(returnValue is Task<T>)
{
valueToLog = returnValue.Result;
}
else
{
valueToLog = returnValue ?? "[null]"
}
this.logger.Log(valueToLog);
}

I want to determine if "returnValue" is a Task or "Task of TResult" and if it's the latter, extract the appropriate value from the Result. Oneidea I have is checking the IsGenericType property, but I am not sureif that will work always.

最佳答案

尽管 Eric Lippert 提到您不应该获取 Task.Result,但仍有几个问题需要回答:

  1. 如何判断一个对象是否为泛型

    obj.GetType().IsGenericType
  2. 是否是Task

    obj.GetType().GetGenericTypeDefinition() == typeof(Task<>)
  3. 如何访问通用属性值

    obj.GetType().GetProperty("Result").GetValue(obj) // This value could be null

关于c# - 检查 Object 是 Task 还是 Task<TResult>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46780813/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com