0

我正在尝试实现一个IValueConverter可以为空的类型,例如 int?枚举?等等,并返回一个布尔值(如果它有一个值,则为 true,否则为 false)。我事先不知道可为空的类型。

装箱value的(类型object)没有 a.HasValue并且我不确定一个简单(value == null)不会反映传递对象的空性,或者是否有任何东西传递给该方法。此外,不可能转换value为 aNullable并且 tehre 似乎不是INullable我可以使用的接口。

基本上,我是否需要强制转换才能确定装箱对象的空值?

这是我所拥有的...

public class NullableHasValueToBool : System.Windows.Data.IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo cultureInfo)
    {
        // Unsure if this is really the nullness of the passed object
        return (value != null);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo cultureInfo)
    {
        throw new NotImplementedException();
    }
}
4

2 回答 2

1

我不确定一个简单的 (value == null) 不会反映传递对象的空性

它会。

或者是否有任何东西传递给该方法

将可空的 with 传递HasValue给 False 或不将值传递给方法基本上是同一回事。

private static void Test()
{
    System.Diagnostics.Debug.WriteLine(IsNull(new int?())); // Displays True
}

private static bool IsNull(object obj)
{
    return obj == null;
}
于 2013-08-13T16:35:11.560 回答
0

这就是我使用的。

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        bool param = bool.Parse(parameter.ToString());
        if (value == null)
        {
            return false;
        }
        else
        {
            return !((bool)value ^ param);
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        bool param = bool.Parse(parameter.ToString());
        return !((bool)value ^ param);
    }
于 2013-08-13T16:33:01.783 回答