C# 转换到接口
我的代码中没有任何错误,但我的筛选器对象始终为空。当我运行调试器时,过滤器对象看起来就像排序对象,一个包含内容的列表。虽然正如您所见,它实际上是一个接口。。要访问筛选器中的信息,我需要更改此代码中的哪些内容?我想我的主要问题是我没有完全掌握如何使用接口C# 转换到接口,c#,.net,interface,casting,C#,.net,Interface,Casting,我的代码中没有任何错误,但我的筛选器对象始终为空。当我运行调试器时,过滤器对象看起来就像排序对象,一个包含内容的列表。虽然正如您所见,它实际上是一个接口。。要访问筛选器中的信息,我需要更改此代码中的哪些内容?我想我的主要问题是我没有完全掌握如何使用接口 public IList<Kendo.Mvc.IFilterDescriptor> Filters { get; set; } public IList<Kendo.Mvc.SortDescriptor> Sorts {
public IList<Kendo.Mvc.IFilterDescriptor> Filters { get; set; }
public IList<Kendo.Mvc.SortDescriptor> Sorts { get; set; }
public IList过滤器{get;set;}
公共IList排序{get;set;}
List sort=request.Sorts为List;
如果(sort.Count==1)
{
pRequest.SortMember=排序[0]。成员;
pRequest.SortDirection=(int)排序[0]。SortDirection;
}
列表过滤器=请求。过滤器作为列表;
if(过滤器!=null)
{
pRequest.Startdate=(日期时间)筛选器[0]。ConvertedValue;
}
其他的
{
var endDate=新的时间跨度(4000,0,0,0);
pRequest.Startdate=DateTime.UtcNow-endDate;
}
列表为空,因为您试图将列表
强制转换为列表
,但仅仅因为过滤器描述符
继承自过滤器描述符
并不意味着列表
继承自列表
(除非列表是协变的列表
)
你应该这样做:
IList<IFilterDescriptor> filter = request.Filters;
IList filter=request.Filters;
如果界面对此没有问题,则可以对列表进行如下处理:
List<FilterDescriptor> filter = request.Filters.OfType<FilterDescriptor>.ToList();
List filter=request.Filters.OfType.ToList();
谢谢你们的帮助,我和一位朋友谈过,他建议我这么做。。。因此,我想我不应该试图转换列表和接口
if(request.Sorts.Count==1)
{
pRequest.SortMember=request.Sorts[0]。成员;
pRequest.SortDirection=(int)request.Sorts[0].SortDirection;
}
如果(request.Filters.Count>=1)
{
foreach(request.Filters中的var项)
{
if(项目为Kendo.Mvc.FilterDescriptor)
{
变量描述符=(Kendo.Mvc.FilterDescriptor)项;
pRequest.Startdate=(DateTime)descriptor.ConvertedValue;
}
}
}
其他的
{
var endDate=新的时间跨度(4000,0,0,0);
pRequest.Startdate=DateTime.UtcNow-endDate;
}
问题是,列表
不是协变的。即使是这样,也会使从List
到List
的转换成为可能,而不是相反。顺便说一句。我认为你根本不需要这些类型转换。嗯,你说得对,我不需要这些类型转换。将request.Filters
分配到List
需要显式转换。这不是因为注意,在泛型类型中,我也将类型从FilterDescriptor
更改为IFilterDescriptor
。如果您的意思是从IList
强制转换为List
,那么您只需要在最后添加.ToList()
。是的,我的意思是从IList
强制转换为List
。您的第一个建议不会产生错误,但遗憾的是筛选对象不包含任何属性。你的第二个建议不起作用,因为request.Filters不知道类型是什么。第二个是打字错误,我修正了它。。。请重新解释第一个问题。
List<FilterDescriptor> filter = request.Filters.OfType<FilterDescriptor>.ToList();