((MyCustomObject)myObjectType).MyProperty有巨大的成本?

时间:2015-02-05 16:30:47

标签: c# casting

好吧,我在模型中有这样一个类型对象的ObservableCollection:

private ObservableCollection<object> _selectedItems = new ObservableCollection<object>();
public SelectedItems
{
    get{return _selectedItems}
    set
    {
        _selectedItems = value;
        NotifyPropertyChanged("SelectedItems");
    }
}

我正在使用附加属性来更新视图中的选定项目,因此要使用对象类型进行通用行为。

嗯,我的问题是在我的视图模型中我需要访问我的类型的属性。所以我这样做:

((MyCustomType)SelectedItems[0]).MyProperty.

但这是一项非常繁琐的工作,并认为此演员阵容有成本。所以我这样做很多次,我想知道是否有更好的解决方案。

也许使用动态类型而不是对象类型?优点是我不需要进行演员表,但我失去了智能感知功能,因此调试错误更加困难。

也许是另一种解决方案?

1 个答案:

答案 0 :(得分:2)

没有装箱/拆箱的铸造(假设MyCustomObject是一个类而不是结构)没有特别大的开销,但如果你知道类型总是MyCustomObject,那么正确的解决方案是将集合声明为

private ObservableCollection<MyCustomObject> _selectedItems 
                        = new ObservableCollection<MyCustomObject>();