经典的属性设置!
今天无意中在一个老外的博客里看到了属性的经典设置,尤其是在Set属性时所做的判断那是相当的经典,至少是我见到的经典,也许是我见识太少了.
,他在里面用到了其他基本数据类型的TryParse()方法是很经典.不卖官子了,下面是代码:

1
public class TransactionRequestInfo
2
{
3
public string FirstName { get; set; }
4
public string LastName { get; set; }
5
public string Address { get; set; }
6
public string City { get; set; }
7
public string State { get; set; }
8
public string Country { get; set; }
9
public string Description { get; set; }
10
11
private decimal _amount;
12
public decimal ChargeAmount
13
{
14
get
15
{
16
return _amount;
17
}
18
set
19
{
20
_amount = Decimal.Round(value, 2);
21
}
22
}
23
24
private string _zip;
25
public string Zip
26
{
27
get
28
{
29
return _zip;
30
}
31
set
32
{
33
int res;
34
if (int.TryParse(value, out res))
35
{
36
if (res > 99999)
37
{
38
throw new ArgumentException("Zip Code Value invalid");
39
}
40
else
41
{
42
_zip = res.ToString().PadLeft(5, ‘0′);
43
}
44
}
45
else
46
{
47
throw new ArgumentException("Zip code must be numeric");
48
}
49
}
50
51
}
52
53
private string _securityCode;
54
public string SecurityCode
55
{
56
get
57
{
58
return _securityCode;
59
}
60
set
61
{
62
int res;
63
if (int.TryParse(value, out res))
64
{
65
if (res > 999)
66
{
67
throw new ArgumentException("Security Code Value invalid");
68
}
69
else
70
{
71
_securityCode = res.ToString().PadLeft(3, ‘0′);
72
}
73
}
74
else
75
{
76
throw new ArgumentException("Security code must be numeric");
77
}
78
}
79
80
}
81
82
private string _cardNumber;
83
public string CardNumber
84
{
85
get
86
{
87
return _cardNumber;
88
}
89
set
90
{
91
long res;
92
if (long.TryParse(value, out res))
93
{
94
_cardNumber = res.ToString();
95
}
96
else
97
{
98
throw new ArgumentException("Card Number may only contain numbers");
99
}
100
}
101
}
102
103
private string _expDate;
104
public string ExpDate
105
{
106
get
107
{
108
return _expDate;
109
}
110
set
111
{
112
int res;
113
if (int.TryParse(value, out res))
114
{
115
string exp = res.ToString().PadLeft(4, ‘0′);
116
int month = int.Parse(exp.Substring(0, 2));
117
int yr = int.Parse(exp.Substring(2, 2));
118
119
if (yr > DateTime.Now.Year ||
120
(yr == DateTime.Now.Year && month >= DateTime.Now.Month))
121
{
122
_expDate = month.ToString().PadLeft(2, ‘0′) +
123
"/" + yr.ToString().PadLeft(2, ‘0′);
124
}
125
else
126
{
127
throw new ArgumentException("Expiration Date already passed");
128
}
129
}
130
else
131
{
132
throw new ArgumentException("Expiration Date must be numeric");
133
}
134
}
135
}
136
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136
