【问题标题】:How to cast this type?如何投射这种类型?
【发布时间】:2021-11-18 04:08:12
【问题描述】:

我有这门课:

 public class Response<T>
{
    public Response(T data, string msg, bool error)
    {
        Data = data;
        Message = msg;
        Error = error;
    }

    public T Data { get; set; }
    public string Message { get; set; }
    public bool Error { get; set; }
}

然后我有一个响应方法,它返回这个带有特定 T 的 Response 类,例如Response&lt;int&gt;

但它以 TResponse 的形式返回,因为它是从泛型方法返回的(来自所有带有 MediatR 的处理程序)

所以我有:

var result = await next();

返回一个 TResponse 类型 con“结果”。

并且我想将其转换为这样:

        Response<T> response = (Response<T>)result;

        logMsg += $"Response status: {(response.Error ? "FAIL" : "OK")}" + Environment.NewLine;
        logMsg += $"Response message: {response.Message}" + Environment.NewLine;

当然,这种演员阵容不起作用。

我该如何解决这个问题?

【问题讨论】:

  • 这个问题需要改进才能回答。 next() 的签名是什么?你上一个代码sn-p的范围是什么?什么是“TResponse”?
  • 我有一个响应方法你能编辑你的问题以包含它的代码吗?

标签: c# .net-core


【解决方案1】:

可以添加一个接口来代替强制转换,让您可以访问消息和错误属性,而不管T 的类型如何。

public interface IResponse
{
    public string Message { get; set; }
    public bool Error { get; set; }
}

public class Response<T> : IResponse
{
    public Response(T data, string msg, bool error)
    {
        Data = data;
        Message = msg;
        Error = error;
    }

    public T Data { get; set; }
    public string Message { get; set; }
    public bool Error { get; set; }
}

【讨论】:

    猜你喜欢
    • 2012-01-24
    • 2012-06-09
    • 1970-01-01
    • 2023-03-31
    • 2014-09-05
    • 2012-12-12
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多