C# 将所选项目归因于特定类型

C# 将所选项目归因于特定类型,c#,wpf,xaml,combobox,boxing,C#,Wpf,Xaml,Combobox,Boxing,我有一个组合框,里面有一些东西。在发生事件时,我想将该项分配给一个变量。目前,由于SelectedItem是Object类型,我需要将其取消装箱到所需的类型,如下所示 Something something = ThatComboBox.SelectedItem as Something; 如果使用枚举来定义类型,则更不方便,因为这样我需要对其进行强制转换或为null,然后像这样合并 Something something; something = (Something)ThatCombo

我有一个组合框,里面有一些东西。在发生事件时,我想将该项分配给一个变量。目前,由于SelectedItem是Object类型,我需要将其取消装箱到所需的类型,如下所示

Something something = ThatComboBox.SelectedItem as Something;
如果使用枚举来定义类型,则更不方便,因为这样我需要对其进行强制转换或为null,然后像这样合并

Something something;
  something = (Something)ThatComboBox.SelectedItem;
  something = ThatComboBox.SelectedItem as Something? ?? default(Something);
我想知道我是否可以(如果可以的话,我怎么做)属性(或类似)组合框,这样当我得到它所选的项目,我得到它作为任何类型的我的心的愿望。或者,至少是拳击之前的那种类型


请注意,我想知道是否可以在不使用扩展方法的情况下执行

组合框。SelectedItem
具有类型
对象
,因此它可能包含对任何类型(或null)的引用

as
oerator根本不起作用,只允许编译器将引用视为对另一种类型的引用(在您的例子中是对某个对象的引用)


不涉及运行时开销,只需在源代码中多写一行即可。我看不出为什么/如何避免这种情况。

我需要取消装箱
您的
是否有不可空值类型的东西?如果是这样,您就不能将
用作
。您当然可以将
组合框
子类化,创建一个通用版本,并定义一个新的
SelectedItem
属性来为您做到这一点,但对于如此琐碎的事情来说,这似乎需要做很多工作。“一个扩展方法会容易得多。”哈姆雷特·哈科比扬我很肯定我能做到。你看到第二段代码了吗?在任何情况下,问题是如何避免独立于是否可为null而进行as-ing和casting的必要性。@Chris我同意你的观点。事实上,我使用的是一种扩展方法。问这个问题是因为我想知道是否有一种更平滑的方法,例如,将某物的属性设置为类型。我猜答案是“不”。谢谢你,伙计@KonradViltersten是的,恐怕没有运行时属性能够在编译时更改类型!这一点是为了避免在赋值之前对值进行null化和随后的合并(以及避免强制转换)。前者背后的原因是它看起来不那么可读。后者是因为我不相信人们不会不负责任地改变类型。