Guest User

Untitled

a guest
Jul 23rd, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.72 KB | None | 0 0
  1. open System
  2. #r "System.ComponentModel.DataAnnotations"
  3. open System.ComponentModel.DataAnnotations
  4. open System.Collections.Generic
  5.  
  6. type Person() =
  7. let mutable name = ""
  8. let mutable phone = ""
  9. let mutable age = 0
  10.  
  11. // 名前は必須
  12. [<Required>]
  13. member p.Name
  14. with get() = name
  15. and set(v) = name <- v
  16.  
  17. // 電話番号も必須で、番号のフォーマットが規定されている
  18. [<Required>]
  19. [<RegularExpression(@"^[0-9]{3}-[0-9]{4}-[0-9]{4}$")>]
  20. member p.Phone
  21. with get() = phone
  22. and set(v) = phone <- v
  23.  
  24. // 年齢は 3-100 歳でなければならない
  25. [<Range(3,100)>]
  26. member p.Age
  27. with get() = age
  28. and set(v) = age <- v
  29.  
  30. // バリデーション結果を表示する
  31. let printValidationResults (results:ValidationResult seq) =
  32. let message_of (r:ValidationResult) =
  33. String.Join(", ", r.MemberNames) + ": " + r.ErrorMessage
  34.  
  35. results
  36. |> Seq.map message_of
  37. |> (fun x -> String.Join("\n", x))
  38. |> printfn "%s"
  39.  
  40. // バリデートして結果を表示する
  41. let validate p =
  42. let c = new ValidationContext(p, null, null)
  43. let r = new List<ValidationResult>()
  44. if Validator.TryValidateObject(p, c, r, true)
  45. then
  46. printfn "検証エラー無し\n"
  47. else
  48. Seq.cast r
  49. |> printValidationResults
  50.  
  51. let main() =
  52. let p = new Person()
  53. validate p
  54. (*
  55. Name: Name フィールドが必要です。
  56. Phone: Phone フィールドが必要です。
  57. Age: フィールド Age は 3 から 100 までの範囲で指定してください。
  58. *)
  59.  
  60. p.Name <- "taro"
  61. p.Age <- 33
  62. p.Phone <- "123-4567-8901"
  63. validate p
  64. (*
  65. 検証エラー無し
  66. *)
  67.  
  68. main()
Add Comment
Please, Sign In to add comment