我有一个字符串来刷,我在WPF使用基于文本的内容上色列表框项目转换器。C#隐式转换+开箱+条件表达式
然而,正如你可能已经知道,列表框的行为时,越野车使用相同的文字更字符串项目里面,你开始点击随便你可以得到更多选择的项目(视觉)。
为了解决这个问题,我创建了一个类作为字符串隐式使用的OutputMessage,但是由于隐式转换为它现在转换的每个字符串创建了OutputMessage的新实例,所以列表框比较了实例而不是字符串值并且行为正确。
但是我离开了记录管理程序把普通字符串在那里,因为它总是与当前时间前缀和有没有重复,这样就不会出现问题。
但我在转换器中发现一个奇怪的情况与拆箱:
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
String txt = value is OutputMessage ? (OutputMessage)value : (String)value;
通过这样做,你会得到:
错误1种类型条件表达式不能确定,因为“OutputMessage”和“串'隐式地转换为另一个
我们正在调整一个字符串,并且在任何情况下都存在隐式转换,所以我尝试使用条件表达式来选择'p ath'以正确拆箱。
这里的问题是,我不能使用
String txt = (String)value;
或
String txt = (OutputMessage)value;
,因为列表框项目可以是任何两个,并从拆箱对象的值将失败。
我最终与if语句和类型检查解决了这个问题,但还挺杀死隐式转换的有效性。我希望条件表达式coudl处理这个:(
BTW,这无关拆箱;这仅适用于值类型。 – SLaks 2011-04-15 16:21:57