Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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# 将IEnumerable强制转换为自定义ObservableCollection类?_C#_Inheritance_Casting - Fatal编程技术网

C# 将IEnumerable强制转换为自定义ObservableCollection类?

C# 将IEnumerable强制转换为自定义ObservableCollection类?,c#,inheritance,casting,C#,Inheritance,Casting,是否可以将IEnumerable转换为从ObservableCollection类继承的自定义类 原因是我只想在get上选择一组经过筛选的项目。我想在get上实现它,因为许多其他属性引用CustomItems并对这些项执行处理,但我想让它处理过滤后的项集,具体取决于值是否启用 下面是帮助解释我想要实现的目标的代码: public class CustomItemsCollection : ObservableCollection<ItemViewModel> { public

是否可以将IEnumerable转换为从ObservableCollection类继承的自定义类

原因是我只想在get上选择一组经过筛选的项目。我想在get上实现它,因为许多其他属性引用CustomItems并对这些项执行处理,但我想让它处理过滤后的项集,具体取决于值是否启用

下面是帮助解释我想要实现的目标的代码:

public class CustomItemsCollection : ObservableCollection<ItemViewModel>
{
    public ListView ListView { get; set; }
    public void ScrollToItem(object item = null)
    {
        //Some custom Code
    }
}
具体而言,本部分:

if(SomeValueIsEnabled)
{
    var filteredItems = _CustomItems.Where(c => c.Property.equals(SomeValue));
    var castedItems = (CustomItemsCollection)filteredItems;
    return castedItems;
}
这是可能的还是错误的?最好的做法是什么

谢谢大家!

您不能仅强制转换它,但您可以创建
CustomItemsCollection
的实例,并使用
filteredItems
对其进行初始化

将构造函数添加到自定义类,该类将传递到:

请尝试使用以下代码:

 var filteredItems = _CustomItems.Where(c => c.Property.equals(SomeValue))
.Select(pre=> new ItemViewModel(){
//add info here
});
var castedItems = new CustomItemsCollection(filteredItems);

工作得很好!每次查询CustomItems时创建新CustomItems集合是否可能存在内存泄漏?不,不应该存在任何泄漏。GC会像往常一样清理的。谢谢。我尝试了它,但它在.Select上为我显示了一个错误。
public class CustomItemsCollection : ObservableCollection<ItemViewModel>
{
    public CustomItemsCollection(IEnumerable<ItemViewModel> items)
        : base(items) { }

   // your other code here
}
var filteredItems = _CustomItems.Where(c => c.Property.equals(SomeValue));
var collection = new CustomItemsCollection(filteredItems);
return collection;
 var filteredItems = _CustomItems.Where(c => c.Property.equals(SomeValue))
.Select(pre=> new ItemViewModel(){
//add info here
});
var castedItems = new CustomItemsCollection(filteredItems);