Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 转换到接口_C#_.net_Interface_Casting - Fatal编程技术网

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();