gpt4 book ai didi

c# - 如何在不知道类型参数类型的情况下检查对象是否继承自通用基类

转载 作者:行者123 更新时间:2023-11-30 17:42:35 25 4
gpt4 key购买 nike

我有以下类结构:

public class Request : BaseRequest, IRequestFromResponse
{
}

它定义了一个 Request 对象,通过 html 表单发布。

ModelRequest 所在的位置构建如下:

public class Response : BaseRequestWrapperResponse<Request>
{
}

当构建 BaseWrapper 时:

public abstract class BaseRequestWrapperResponse<TRequest> where TRequest : IRequestFromResponse
{
public TRequest Request { get; set; }
}

IRequestFromResponse 只是一个空的标记接口(interface)。

我尝试在运行时转换对象,因此我可以访问 BaseRequestWrapperResponseRequest 属性。

目前我只有:

var model = ((ViewContext) context).ViewData.Model;

if (model.GetType().IsSubclassOf(typeof (BaseRequestWrapperResponse<IRequestFromResponse>)))
// if (model.GetType().BaseClass.IsAssignableFrom(typeof (BaseRequestWrapperResponse<IRequestFromResponse>)))
// if (model.GetType().IsSubclassOf(typeof (BaseRequestWrapperResponse<>)))
// if (model.GetType().BaseClass.IsAssignableFrom(typeof (BaseRequestWrapperResponse<>)))
{
model = ((BaseRequestWrapperResponse<IRequestFromResponse>) model).Request;
}

我无法获得指示 model 是某种 BaseRequestWrapperResponse 的检查。类型转换将是我的下一个问题。

最佳答案

如何添加一个非通用的 BaseRequestWrapperResponse 类。

public abstract class BaseRequestWrapperResponse 
{
public IRequestFromResponse Request { get; set; }
}

public abstract class BaseRequestWrapperResponse<TRequest> : BaseRequestWrapperResponse where TRequest : IRequestFromResponse
{
public new TRequest Request
{
get{ return (TRequest)base.Request; }
set{ base.Request = value; }
}
}

然后只是:

model = ((BaseRequestWrapperResponse) model).Request;

关于c# - 如何在不知道类型参数类型的情况下检查对象是否继承自通用基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31808013/

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