Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.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# 我如何保证我的类可以作为特定类型解除绑定?_C#_Wpf_Ivalueconverter_Unboxing - Fatal编程技术网

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在我看来不像是重复的。我认为“编译时语法糖”应该成为一个永久的技术短语,因为它令人敬畏。