c# - 转换到界面

标签 c# .net interface casting

我的代码中没有出现任何错误,但我的过滤器对象始终为空。当我运行调试器时,过滤器对象看起来就像排序对象,一个包含内容的列表。尽管如您所见,它实际上是一个接口(interface)。我需要在此代码中更改什么才能访问过滤器中的信息?我想我的主要问题是我没有完全掌握如何使用界面。

public IList<Kendo.Mvc.IFilterDescriptor> Filters { get; set; }
public IList<Kendo.Mvc.SortDescriptor> Sorts { get; set; }
List<SortDescriptor> sort = request.Sorts as List<SortDescriptor>;
if(sort.Count == 1)
{
    pRequest.SortMember = sort[0].Member;
    pRequest.SortDirection = (int)sort[0].SortDirection;

}

List<FilterDescriptor> filter = request.Filters as List<FilterDescriptor>;
if (filter != null)
{
    pRequest.Startdate = (DateTime)filter[0].ConvertedValue;
}
else
{
    var endDate = new TimeSpan(4000, 0, 0, 0, 0);
    pRequest.Startdate = DateTime.UtcNow - endDate;
}

最佳答案

列表为空,因为您正在尝试转换 List<IFilterDescriptor>进入List<FilterDescriptor> , 但仅仅因为 FilterDescriptor继承自 IFilterDescriptor并不意味着 List<FilterDescriptor>继承自 List<IFilterDescriptor> (除非列表是协变的 List<in T> 而事实并非如此)。

你应该这样做:

IList<IFilterDescriptor> filter = request.Filters;

如果界面没问题,否则你可以像这样列出列表:

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

关于c# - 转换到界面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22182132/

相关文章:

c# - MethodBase 作为哈希表键

.net - 如何找出一个程序集引用了哪些程序集?

c# - 如何存储/检索 RSA 公钥/私钥

Java 8 lambda 泛型接口(interface)方法

ios - 如何让一个 View Controller 从另一个 View Controller 访问变量?

interface - 自动映射器 : Mapping to an Interface

c# - 即使集合没有改变,MVVM 从 ViewModel 刷新 Datagrid

c# - 使用 C# 从命令行启动 minecraft 1.6.4

c# - Windows 7/8、Direct3D9、10 和 11 - 效果/着色器

c# - X分钟后黑屏