2014-01-20 6 views
1
type circle = { X : int; Y : int; Diameter : int; Color : Color} 
let mutable clickedCircle = { X = 0; Y = 0; Diameter = 0; Color = Color.White} 

let txtBoxVal4 = System.Enum.Parse(typeof<Color>,txtBox2.Text) 
clickedCircle <- {X = txtBoxVal2; Y = txtBoxVal3; Diameter = txtBoxVal1; Color = txtBoxVal4} 

Я пытаюсь разобрать textbox.text в цвет. Из этого кода я получаю сообщение об ошибке:f # разбор строки для цвета

Error 1 This expression was expected to have type 
Color  
but here has type 
obj 

Совершенно новый для F # и не уверен в синтаксисе. Ошибка приходит в

"Color = txtBoxVal4" 

ответ

1

System.Enum.Parse возвращает obj типа, что вам нужно, чтобы бросить к перечислимому типу. Вы можете сделать это, используя :?> или downcast. В вашем случае тип известен, поэтому вы можете использовать downcast.

См. Документы Casting and Conversions для получения дополнительной информации.

clickedCircle <- {X = txtBoxVal2; Y = txtBoxVal3; Diameter = txtBoxVal1; Color = downcast txtBoxVal4} 
1

Функция обертки для Enum.Parse может эффективно использовать enum ограничения и устранить необходимость распаковки на месте вызова.

module Enum = 
    let parse<'T, 'U when 'T : enum<'U>> value = Enum.Parse(typeof<'T>, value) :?> 'T 

let color = Enum.parse "Black" 
Смежные вопросы