views:

53

answers:

1

I'm encountering a situation where I'm using pattern matching for determining the visibility property of a column. System.Windows.Visibility has two fields, Visibility.Visible and Visibility.Collapsed. Can enyone tell me why the following code:

let colItem = myDataGrid.Columns.Item 1
     chkBox.IsChecked <-
          match colItem.Visibility with
               | Visibility.Visible -> new Nullable<bool>(true)
               | Visibility.Collapsed -> new Nullable<bool>(false)

generates the follwing warning:

Incomplete pattern matches on this expression. For example, the value '2uy' may indicate a case not covered by the pattern(s).

+5  A: 

In theory a value of type Visibility can be something other than Visible or Collapsed because .net enums allow any value of the underlying integral type as a value for the enum type (to allow things like ORing enums).

sepp2k
Right, .NET enums are thin facades over integer types, and can take on any value of the underlying integer type.
Brian
This is correct. For instance, `(LanguagePrimitives.EnumOfValue 2uy : Visibility)` will give you a value of type `Visibility` which is neither `Visible` nor `Collapsed`, just as the compiler warns about.
kvb