C# 我如何保证我的类可以作为特定类型解除绑定?
我创建了一个C# 我如何保证我的类可以作为特定类型解除绑定?,c#,wpf,ivalueconverter,unboxing,C#,Wpf,Ivalueconverter,Unboxing,我创建了一个IValueConverter,它将bool转换为System.Windows.Visibility对象(它与BooleanToVisibilityConverter相反)。它工作得很好,除非我试着在可观察的对象上使用它Observable是我用隐式运算符定义的一个类,用于将其转换为T。问题是,当将其作为布尔解装箱时,我会得到一个InvalidCastException public object Convert(object value, Type targetType, obje
IValueConverter
,它将bool转换为System.Windows.Visibility
对象(它与BooleanToVisibilityConverter
相反)。它工作得很好,除非我试着在可观察的对象上使用它Observable
是我用隐式运算符定义的一个类,用于将其转换为T。问题是,当将其作为布尔解装箱时,我会得到一个InvalidCastException
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if ((bool)value) // InvalidCastException
{
return Visibility.Hidden;
}
else
{
return Visibility.Visible;
}
}
当Observable
作为对象装箱时,C#似乎忽略了我的隐式操作符。例如:
Observable<bool> obs = new SimpleObservable<bool>(true);
object obj = obs;
// This conversion works just fine:
bool bval = (bool)(Observable<bool>)obj;
// This conversion throws an InvalidCastException:
bval = (bool)obj;
Observable obs=新的SimpleObservable(true);
对象obj=obs;
//此转换工作正常:
bool bval=(bool)(可观察)obj;
//此转换引发InvalidCastException:
bval=(bool)obj;
有没有办法保证我的可观察的可以作为bool解除绑定
有什么方法可以保证我的可观测数据可以作为布尔解绑
不是。这段代码让人想起了Nullable
,它需要编译器的直接支持来完成任务
问题是,implicit
在运行时不会创建真正的隐式转换。这纯粹是编译时语法。每当编译器注意到您试图将类型为X
的表达式放入类型为Y
的变量时,它都会在编译时在X
和Y
的定义中查找隐式转换运算符,如果找到,则将适当的静态方法调用放置到位以进行转换。当您到达运行时,已经没有任何隐式(或显式)转换运算符的知识了。剩下的只是语言中的少数几个元素,比如基本类型之间和类型层次结构中的类型之间。可能的重复:@RobertHarvey在我看来不像是重复的。我认为“编译时语法糖”应该成为一个永久的技术短语,因为它令人敬畏。