Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.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; }

列表为空,因为您试图将列表强制转换为列表,但FilterDescriptor从IFilterDescriptor继承并不意味着列表从列表继承,除非列表是协变列表,而不是协变列表

你应该这样做:

IList<IFilterDescriptor> filter = request.Filters;
如果界面对此没有问题,则可以对列表进行如下处理:

List<FilterDescriptor> filter = request.Filters.OfType<FilterDescriptor>.ToList();

列表为空,因为您试图将列表强制转换为列表,但FilterDescriptor从IFilterDescriptor继承并不意味着列表从列表继承,除非列表是协变列表,而不是协变列表

你应该这样做:

IList<IFilterDescriptor> filter = request.Filters;
如果界面对此没有问题,则可以对列表进行如下处理:

List<FilterDescriptor> filter = request.Filters.OfType<FilterDescriptor>.ToList();

谢谢你们的帮助,我和我的一个朋友谈过,他建议我这么做。。。因此,我想我不应该试图转换列表和接口

ifrequest.Sorts.Count==1 { pRequest.SortMember=request.Sorts[0]。成员; pRequest.SortDirection=intrequest.Sorts[0].SortDirection; } 如果request.Filters.Count>=1 { request.Filters中的foreachvar项 { ifitem为Kendo.Mvc.FilterDescriptor { 变量描述符=Kendo.Mvc.FilterDescriptoritem; pRequest.Startdate=DateTimedescriptor.ConvertedValue; } } } 其他的 { var endDate=新的时间跨度4000,0,0,0; pRequest.Startdate=DateTime.UtcNow-endDate; }
谢谢你们的帮助,我和我的一个朋友谈过,他建议我这么做。。。因此,我想我不应该试图转换列表和接口

ifrequest.Sorts.Count==1 { pRequest.SortMember=request.Sorts[0]。成员; pRequest.SortDirection=intrequest.Sorts[0].SortDirection; } 如果request.Filters.Count>=1 { request.Filters中的foreachvar项 { ifitem为Kendo.Mvc.FilterDescriptor { 变量描述符=Kendo.Mvc.FilterDescriptoritem; pRequest.Startdate=DateTimedescriptor.ConvertedValue; } } } 其他的 { var endDate=新的时间跨度4000,0,0,0; pRequest.Startdate=DateTime.UtcNow-endDate; }
问题是,列表不是协变的。即使是这样,也会让演员从一个名单到另一个名单成为可能,而不是相反。顺便说一句,我认为你们根本不需要这些模型。嗯,你们是对的,我不需要这些模型。问题是,列表不是协变的。即使是这样,也会让演员从一个名单到另一个名单成为可能,而不是相反。顺便说一句。我认为你根本不需要这些强制转换。嗯,你说得对,我不需要这些强制转换。将请求。筛选器分配到列表需要显式强制转换。这不是因为我也已在泛型类型中将类型从FilterDescriptor更改为IFilterDescriptor。如果您的意思是从IList强制转换到列表,那么您只需要在最后添加.ToList。是的,我的意思是从IList强制转换到列表。您的第一个建议不会产生错误,但遗憾的是筛选器对象不包含任何属性。你的第二个建议不起作用,因为request.Filters不知道类型是什么。第二个是打字错误,我修正了它。。。请重新解释第一个。将请求.筛选器分配到列表需要显式强制转换。请注意,我在泛型类型中也已将类型从FilterDescriptor更改为IFilterDescriptor。如果您的意思是从IList强制转换到列表,那么您只需要在最后添加.ToList。是的,我的意思是从IList强制转换到列表。您的第一个建议不会产生错误,但遗憾的是筛选器对象不包含任何属性。你的第二个建议不起作用,因为request.Filters不知道类型是什么。第二个是打字错误,我修正了它。。。请重新解释第一个问题。