【发布时间】:2020-03-27 09:17:49
【问题描述】:
namespace ConsoleApp2
{
public class KTEST<T>
{
public int PageNumber { get; set; }
public int PageSize { get; set; }
public T Filter { get; set; }
}
public class Request
{
public int CountryId { get; set; }
}
class Program
{
public static void Main(string[] args)
{
KTEST<Request> kTESTRequest = new KTEST<Request>();
kTESTRequest.PageNumber = 1;
kTESTRequest.PageSize = 20;
kTESTRequest.Filter.CountryId = 1;
}
}
}
现在,如何在不使用“过滤器”的情况下获取 countryId 属性。 我需要使用 kTESTRequest.CountryId 而不是 kTESTRequest.Filter.CountryId
你能帮我解决这个问题吗?
【问题讨论】:
-
不可能
-
除非你有一个你做不到的接口,否则为什么你真的需要这样做?
-
@BuntyChoudhary:“它可以是任何东西”是尽可能模糊的。你目前的期望是矛盾的。一方面,你告诉我“它可以包含任何东西”。另一方面,您的代码告诉我过滤器肯定有
CountryId属性。这是一个或另一个。这要么是 XY 问题,要么是对泛型的深刻误解。我还在写一个答案,但在你没有具体信息的情况下,这将是一个理论上的答案。 -
@BuntyChoudhary:好的,所以二等舱也有 CountryId。每个过滤器都会有一个国家 ID 吗?您是否也希望使用过滤器中的 StateId ?当您使用原始请求类并尝试访问该原始请求类中不存在的 StateId 时,代码会发生什么情况?在编写可以处理所有这些情况的代码之前,您确实需要考虑在这些情况下要发生什么。
-
为什么 KTEST 应该是通用的,为什么不能将所有过滤器作为属性放在 KTEST 类中?
标签: c#